上次我们发现了 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;