首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用图形处理器画布和TCanvas.DrawBitmap时的低质量缩小插值

使用图形处理器画布和TCanvas.DrawBitmap时的低质量缩小插值
EN

Stack Overflow用户
提问于 2018-07-03 23:01:26
回答 2查看 506关注 0票数 0

当设置Delphi使用图形处理器画布(FMX.Types.GlobalUseGPUCanvas := True)时,在windows和android下,调用TCanvas.DrawBitmap时似乎没有执行高质量的缩小比例插值,相反,结果看起来像是像素化的(最近邻缩放?)。

查看源代码(FMX.Canvas.GPU.pas/DoDrawBitmap),"HighSpeed“参数从未使用过。

使用TCanvas.DrawBitmap:

使用基于软件的双三次定标器(慢得多):

有人会认为使用GPU将提供一个廉价(CPU使用明智)高质量的缩放器,但事实似乎并非如此。

有没有办法使用Delphi (或者至少是Android下的Delphi )访问高质量的跨平台硬件缩放器?

编辑:

在这些屏幕截图中,表单的Quality属性设置为"HighQuality“。

EN

回答 2

Stack Overflow用户

发布于 2018-07-04 00:37:07

是的,HighSpeed从未被使用过,但这并不意味着他们没有插值。在图形处理器上,插值是通过Form.quality (HighPerformance / HighQuality)进行的

票数 0
EN

Stack Overflow用户

发布于 2018-07-22 18:40:00

桌面上的

  1. GlobalUseGPUCanvas := True始终在没有AA的情况下绘制所有控件。所以不要在桌面上使用它。在Android/iOS上,这是一个默认的方法。如果你不使用GlobalUseGPUCanvas,但仍然没有AA,则使用
  2. 。这是因为缩放屏幕当前的全局比例值。如果比例是3,你应该在Photoshop中准备3倍比例的图像(分辨率提高3倍,图像将经过平滑处理)。

如果您在运行时使用画布(例如图)绘制图像,则此代码:

代码语言:javascript
运行
复制
if Scene <> nil then
  lScale := Scene.GetSceneScale
else
  lScale := 1;

fBitmap.BitmapScale := lScale;

fBitmap.SetSize(Ceil(Width * lScale), Ceil(Height * lScale) );

若要查看设备上的真实图像大小,请将TImage.Wrapmode设置为“原始”。

附注:顺便说一句,如果你需要在Android/iOS上使用抗锯齿绘制基元,如直线、圆等-使用this原生绘制解决方案(在Android/iOS上,FMX绘制没有AA的基元(顺便说一句,这不适用于图像,所有图像在所有平台上都有AA )。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51157715

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档