Firemonkey的旁门左道[三]


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


   


  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值