Firemonkey的旁门左道[一]

一般图形绘制都会用到双缓冲,先在内存中绘制到bitmap中,然后再输出到界面中,可以不出现闪烁的情况。

本以为在FMX也是同样的套路。不然,发现Canvas永远是空白的,愣是不输出。国内资料基本为O,翻墙无数,得知Bitmap的绘制前后需要:

  Bitmap.Canvas.BeginScene; 

  ...

  Bitmap.Canvas.EndScene;

在此之后需要BitmapChanged一下,然后再DrawBitmap到界面中。满心欢喜,结果却大失所望.

BitmapChanged在VCL的项目中有效,但是在FMX的框架中 已经被置为了Private,这在XE2中还是Public。难道是英巴卡迪诺开发人员开小差了?



在Quality Center中果然有人提了这个BUG, 不过至今还没有Fixed掉。


后来发现在DrawBitmap前后,分别对目标Canvas进行BeginScene, EndScene即可显示绘制内容。

代码结构如:

  Bitmap.Canvas.BeginScene; 

  ...

  Bitmap.Canvas.EndScene;

  Self.Canvas.BeginScene() ;

  self.Canvas.DrawBitmap(Bitmap, RectF(0,0,500,500), RectF(0,0,500, 500), 1);

  Self.Canvas.EndScene;


当然你可能发现,如果是在Paint事件中进行绘制,那么就不需要套上BeginScene,EndScene了。我想对于Paint事件,应该是进行过特殊处理。有机会可以把源代码挖出来看看。

-----------------

还有一个方法:TImageControl提供了bitmap,在上面绘制就是所绘即所得,不会出现明明绘制了,结果还是空白的情况。


参考链接:http://stackoverflow.com/questions/8336127/firemonkey-tbitmap-canvas-drawing-methods-have-no-visible-results-what-am-i-do



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值