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;


   


發佈了81 篇原創文章 · 獲贊 20 · 訪問量 33萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章