在将Delphi设置为使用GPU画布(FMX.Types.GlobalUseGPUCanvas:= True)时,在Windows和android下,调用TCanvas.DrawBitmap时似乎没有执行高质量的低比例插值,而是结果看起来像是像素化(最近的邻居缩放器?)。
查看源代码(FMX.Canvas.GPU.pas / DoDrawBitmap),从不使用“ HighSpeed”参数。
人们会认为,使用GPU可以访问便宜的(高质量的CPU使用)缩放器,但事实并非如此。
是否可以使用Delphi(或至少在Android下为Delphi)访问高质量的跨平台硬件缩放器?
编辑:
在这些屏幕截图中,表单的“质量”属性设置为“高品质”。
答案 0 :(得分:0)
是的,从未使用过HighSpeed,但这并不意味着它们不是插值。在GPU上,插值是通过Form.quality
(高性能/高质量)
答案 1 :(得分:0)
GlobalUseGPUCanvas:=在桌面上为True始终绘制不带AA的所有控件。因此,请勿在桌面上使用它。在Android / iOS上,这是默认方法。
如果不使用GlobalUseGPUCanvas,但仍然没有AA。那是因为缩放-屏幕当前的全局缩放值。 如果比例为3,则应在Photoshop中以3倍的比例准备图像(分辨率提高3倍,并且图像将变得平滑)。
如果您在运行时使用画布绘制图像(例如图表),则此代码:
if Scene <> nil then
lScale := Scene.GetSceneScale
else
lScale := 1;
fBitmap.BitmapScale := lScale;
fBitmap.SetSize(Ceil(Width * lScale), Ceil(Height * lScale) );
要查看设备上的实际图像大小,请将TImage.Wrapmode设置为Original。
P.s。顺便说一句,如果您需要在Android / iOS上使用抗锯齿来绘制线,圆等图元,请使用this本机绘制解决方案(在Android / iOS上,FMX绘制不带AA的图元(顺便说一下,这不适用于图像,所有图像在所有平台上都使用AA。