首页 新闻 会员 周边

C#双缓冲绘图的疑问,求指教

0
悬赏园豆:10 [已解决问题] 解决于 2014-09-12 15:50

大家都知道C#控件可以直接设置为双缓冲绘图。也就是doublebuff=true;

那么我想知道的是,当我在图像的某个区域A内绘制了图元时,为了效率,绘制完成后只Invalidate(A);只是让这一块区域进行重绘。那么,

控件进行双缓冲绘图的结果是不是只把区域A贴到窗体上来,还是只是在内存中重绘区域A,然后把整张图再绘制到窗体上来。

 

我提这个问题是因为一个项目中用到了滤镜,只提取图像某区域内制定RGB值的像素,然后Invalidate(A)这块区域。窗体也设置了双缓冲绘图,没有闪烁现象了。可是当图片变得很大的时候,即使重绘区域A的大小没有变化,速度也会有明显的降低。我怀疑是不是双缓冲绘图要直接贴上整张更大的图像导致的。Invalidate(A);不会对显示图像的效果产生影响,只是对在内存中画图的过程产生影响?

大芝麻的主页 大芝麻 | 初学一级 | 园豆:4
提问于:2014-08-15 19:08
< >
分享
最佳答案
0

反了,Invalidate 是对显式图像有效果,对内存中的画图过程没有影响,除非在内存画图时也使用了局部刷新机制。

收获园豆:10
Launcher | 高人七级 |园豆:45045 | 2014-08-18 09:30

大侠你好,那么Invalidate 某个固定大小区域的时候,图像处理算法没有变化。图片的大小不同,为什么会对这个处理速度有那么大的影响。双缓冲,是不是每次都是贴上整张图到窗体上来防止闪烁呢。虽然这个不深究,讲究能用,但是心里总是不舒服,求指教。

大芝麻 | 园豆:4 (初学一级) | 2014-08-18 13:24
Launcher | 园豆:45045 (高人七级) | 2014-08-18 13:32
其他回答(1)
0

这个问题有待研究。

Firen | 园豆:5385 (大侠五级) | 2014-08-18 06:14
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册