上次我們發現了 GlobalUseGPUCanvas
當GlobalUseGPUCanvas := True; 可以沒有抗鋸齒化,我們這次來對比一下效果。
左側是開啓的效果,右側則是沒有開啓
Firmonkey對於抗鋸齒化已經做了很好的處理。
對於抗鋸齒化,我們再來看一下效果:
Canvas.Stroke.Thickness := 0.5;
Canvas.DrawLine(TPointF.Create(0,20), TPointF.Create(200,20), 1);
Canvas.Stroke.Thickness := 0.5;
Canvas.DrawLine(TPointF.Create(0,30-0.1), TPointF.Create(200,30-0.1), 1);
Canvas.DrawLine(TPointF.Create(0,40-0.5), TPointF.Create(200,40-0.5), 1);
Canvas.Stroke.Thickness := 1;
Canvas.DrawLine(TPointF.Create(0,50-0.5), TPointF.Create(200,50-0.5), 1); //最顯眼
Canvas.DrawLine(TPointF.Create(0,60), TPointF.Create(200,60), 1);
可以看出,當畫筆粗細是1, 點在半個像素點上的時候,線條是最亮的。具體的原因,小弟不才,還沒有發現。
在Firemonkey和VCL中一個比較大的區別是Canvas。
FMX中,默認所有對象的Canvas是同一個,我們可以在調試的狀態中看一下他們的指針就一目瞭然了。
左邊是FMX下,右邊是VCL框架中的地址
FMX中竟然共享一個Canvas,這明顯不合理啊?
對,其實每個控件都有他們各自的Canvas,SetMatrix就可以方便的切換到各自的座標系中去了。
PaintBox1.Canvas.BeginScene;
PaintBox1.Canvas.SetMatrix(PaintBox1.AbsoluteMatrix);
PaintBox1.Canvas.DrawRect(TRectF.Create(0,0,PaintBox1.Width,
PaintBox1.Height), 40, 40, [TCorner.crTopLeft, TCorner.crTopRight], 1,
TCornerType.ctRound);
PaintBox1.Canvas.DrawLine(TPointF.Create(10,10), TPointF.Create(100,100),
1);
PaintBox1.Canvas.EndScene;