转载:http://blog.sina.com.cn/s/blog_491aced20100ded4.html

TImage32的继承顺序如下:TCustomControl->TCustomPaintBox32->TCustomImage32->TImage32,因此TImage32具有Windows句柄,也天然的具备了HDC这个绘画句柄,同时还可以处理Paint和EraseBackGround等事件。
TImage32和TPaintBox32都继承自TCustomPaintBox32,因此都内置了FBuffer这个TBitmap32类型的对象。在Paint(override)事件中,TCustomPaintBox32做了如下处理:
FBuffer.Lock;
with Canvas do
try
if FInvalidRects.Count > 0 then
for i := 0 to FInvalidRects.Count - 1 do
with FInvalidRects[i]^ do
BitBlt(Canvas.Handle, Left, Top, Right - Left, Bottom - Top, FBuffer.Handle, Left, Top, SRCCOPY)
else
with GetViewportRect do
BitBlt(Canvas.Handle, Left, Top, Right - Left, Bottom - Top, FBuffer.Handle, Left, Top, SRCCOPY);
finally
FBuffer.Unlock;
end;
ResetInvalidRects;
因此可以看出TCustomPaintBox32使用了FBuffer作为缓冲区画布,只有在系统重画事件发生时,才将FBuffer用Bitblt画到控件的画布上。
TImage32和TPaintBox32的一个很大的不同是:TImage32具备了分层功能,这个是通过FLayers: TLayerCollection这个对象实现的。TLayerCollection这个容器内可以包含0-n个TBitmapLayer类型的图层对象,每个图层对象都有一个TBitmap32的子对象。用户可以为TImage32增加不同的图层,并且可以通过设置图层对象OnPixelCombine属性来设置图层的融合效果。
那么这个图层绘制机制是如何被调用呢?原来TCustomPaintBox32的Paint事件中调用了DoPaintBuffer,而TImage32重载了这个函数,在这个函数中,TImage32调用每次stage的绘图函数,其中PST_DRAW_LAYERS类型的stage绘图函数会循环调用每个TBitmapLayer的DoPaint函数。

GR32 TImage32的图层绘制原理的更多相关文章

  1. Android面试收集录12 View测量、布局及绘制原理

    一.View绘制的流程框架 View的绘制是从上往下一层层迭代下来的.DecorView-->ViewGroup(--->ViewGroup)-->View ,按照这个流程从上往下, ...

  2. Android View绘制原理分析

    推荐两篇分析view绘制原理比较好的文章,感谢作者的分享. <Android应用层View绘制流程与源码分析> <View 绘制流程>

  3. UIView的绘制原理

    当UIView调用setNeedDisplay之后, 系统会调用view对应layer的 setNeedsDisplay, 在当前runloop即将结束的时候调用CALayer的display方法. ...

  4. UIView绘制原理,异步绘制

    绘制原理 首先看一幅流程图 UIView调用setNeedsDisplay方法后,实际上并没有发生当前视图的绘制工作,而是在之后的某一时机进行绘制工作,为什么会在之后的某一时机进行绘制工作呢? 当UI ...

  5. Android-图像原理/绘制原理

    图像原理 先专门讲解图片,一想到图片有那些特点:    宽/高 格式jpg/jpeg/... 大小43.kb/... 图片是由像素点组成:像素点是正方形的,只是像素点很小很多,看起来可以拼接圆形⭕️, ...

  6. 讨论cocos2d-x字体绘制原理和应用方案

    转自:http://blog.csdn.net/langresser_king/article/details/9012789 个人一直认为,文字绘制是cocos2d-x最薄弱的环节.对于愤怒的小鸟之 ...

  7. view的绘制原理

    转:http://blog.csdn.net/berber78/article/details/42069301 自定义UI控件,需继承 View类或View的子类,并重载View类中的一些方法,不必 ...

  8. android自定义View的绘制原理

    每天我们都会使用很多的应用程序,尽管他们有不同的约定,但大多数应用的设计是非常相似的.这就是为什么许多客户要求使用一些其他应用程序没有的设计,使得应用程序显得独特和不同. 如果功能布局要求非常定制化, ...

  9. NGUI UIPanel绘制原理学习

    NGUI底层绘制都是调用UIDrawCall来完成的,它会动态实例化出材质球,改变UV偏移和缩放(图集显示).并且全部是面片 UIPanel也是面片,但是内部物体遮罩比较特殊,经过查找发现,影响UIP ...

随机推荐

  1. js字符串RTrim方法(right trim)

    String.prototype.RTrim = function (c) { if (!c) { c = ' '; } var reg = new RegExp('([' + c + ']*$)', ...

  2. nginx的简单操作

    1.今天在nginx下访问403,发现图片访问出现403,其他没有问题,看来下图片的文件夹没有读写的权限,修改下权限就OK了! 2.重启nginx 在env/nginx/sbin目录下输入:nginx ...

  3. Embedding Scripts

    Mono http://www.mono-project.com/docs/advanced/embedding/ http://www.mono-project.com/docs/advanced/ ...

  4. linux下解压命令大全

    .tar 解包:tar xvf FileName.tar打包:tar cvf FileName.tar DirName(注:tar是打包,不是压缩!)———————————————.gz解压1:gun ...

  5. MySQL-curses/termcap缺失

    环境:通前篇 1.错误:缺少 /curses/temrcap checking for termcap functions library... configure: error: No curses ...

  6. java 运行指定类的main函数

    运行jar文件的方法是: java -jar xxx.jar 但是有时,我们希望运行里面的具体某个类,这时可以通过: java -cp xxx.jar xxx.com.xxxx  它会找到这个类的ma ...

  7. jQuery.imgLazyLoad图片懒加载组件

    一.前言 当一个页面中请求的图片过多,而且图片太大,页面访问的速度是非常慢的,对用户的体验非常不友好:使用图片懒加载,可以减轻服务器的压力,增加页面的访问量,这里主要是总结一下我自己写的图片懒加载组件 ...

  8. SqlServer代理执行[分发清除: distribution] 无法删除快照文件

    每天偶尔检查数据库作业是否失败,发现有错误 select top 10 job_id,run_date,run_time,run_duration,step_name,message from  ms ...

  9. sql事务和锁

    摘自:http://www.cnblogs.com/lxconan/archive/2011/10/20/sql_transaction_n_locks_1.html 最近在项目中进行压力测试遇到了数 ...

  10. Reading Famous blog to prevent me wasting time on blind wandering

    I can`t help surfing the useless bbs and some other kind of SNS. The time I begin to do it, it costs ...