大家都知道C#控件可以直接设置为双缓冲绘图。也就是doublebuff=true;
那么我想知道的是,当我在图像的某个区域A内绘制了图元时,为了效率,绘制完成后只Invalidate(A);只是让这一块区域进行重绘。那么,
控件进行双缓冲绘图的结果是不是只把区域A贴到窗体上来,还是只是在内存中重绘区域A,然后把整张图再绘制到窗体上来。
我提这个问题是因为一个项目中用到了滤镜,只提取图像某区域内制定RGB值的像素,然后Invalidate(A)这块区域。窗体也设置了双缓冲绘图,没有闪烁现象了。可是当图片变得很大的时候,即使重绘区域A的大小没有变化,速度也会有明显的降低。我怀疑是不是双缓冲绘图要直接贴上整张更大的图像导致的。Invalidate(A);不会对显示图像的效果产生影响,只是对在内存中画图的过程产生影响?
反了,Invalidate 是对显式图像有效果,对内存中的画图过程没有影响,除非在内存画图时也使用了局部刷新机制。
大侠你好,那么Invalidate 某个固定大小区域的时候,图像处理算法没有变化。图片的大小不同,为什么会对这个处理速度有那么大的影响。双缓冲,是不是每次都是贴上整张图到窗体上来防止闪烁呢。虽然这个不深究,讲究能用,但是心里总是不舒服,求指教。
这个问题有待研究。