自己写一个image控件 求思路我要求一个image控件能读常见的文件格式,比如jpeg,wmf等,并且有旋转,灰度等接口,
问题1。我自己从TGraphicControl继承,override Paint()函数,但是图片的刷新总是有问题,好象是每幅控件单独刷新的,效率很低,不知道TImage是怎么刷新的,效率高的多,

解决方案 »

  1.   

    个人意见:
    做显示需要比较复杂图像处理的可视控件最好不要从TGraphicControl继承。
    因为所有直接继承自TControl控件的刷新是由其Parent的WM_PAINT触发的,看源代码怎么看怎么觉得这段代码效率不高,而且哪怕是只有一个Control需要刷新,所有同级的Control都将重画(除非被完全遮挡或不可视时),大量的无效的图像处理代码将被执行,这样浪费太大了。因此如果不需要显示背景的最好直接从TWinControl或TCustomControl继承,其刷新是由windows直接触发的,而且只有变更的控件才会刷新,无效的图像处理代码运行的机会将少多了,这样不论cpu占用还是显示平滑度都处于一个比较令人满意的程度。 对我个人来说,不到万不得已(比如背景是动画)我不会从TGraphicControl继承而是直接从TWinControl继承来编写图像处理相关的控件,即使是需要显示背景的控件我也宁可用特殊方法去获取背景而不愿意将基类改成从TGraphicControl继承。
      

  2.   

    Broland 已经公开了他的VCL、RTL源代码,为什么不先阅读下呢?
      

  3.   

    TImage是从TGraphicControl继承的,它的刷新是与它有交点的地方才刷新,但是我看TImage.Paint的时候没有就看到关于刷新区域它的特殊处理,
    从TWinControl继承因为是窗口,如果需要多张图片重叠处理会比较麻烦,
    请问下TGraphicControl的刷新机制是怎么做的,WM_PAINt消息是怎么传递过来的,怎么处理的