当设置Delphi使用图形处理器画布(FMX.Types.GlobalUseGPUCanvas := True)时,在windows和android下,调用TCanvas.DrawBitmap时似乎没有执行高质量的缩小比例插值,相反,结果看起来像是像素化的(最近邻缩放?)。
查看源代码(FMX.Canvas.GPU.pas/DoDrawBitmap),"HighSpeed“参数从未使用过。
使用TCanvas.DrawBitmap:
使用基于软件的双三次定标器(慢得多):
有人会认为使用GPU将提供一个廉价(CPU使用明智)高质量的缩放器,但事实似乎并非如此。
有没有办法使用Delphi (或者至少是Android下的Delphi )访问高质量的跨平台硬件缩放器?
编辑:
在这些屏幕截图中,表单的Quality属性设置为"HighQuality“。
发布于 2018-07-04 00:37:07
是的,HighSpeed从未被使用过,但这并不意味着他们没有插值。在图形处理器上,插值是通过Form.quality
(HighPerformance / HighQuality)进行的
发布于 2018-07-22 18:40:00
桌面上的
如果您在运行时使用画布(例如图)绘制图像,则此代码:
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 )。
https://stackoverflow.com/questions/51157715
复制相似问题