日期:2014-05-17  浏览次数:20646 次

请教大家关于picturebox快速显示图像的问题
真心向各位高手请教:
    我现在在做一个小程序,大概功能是主窗体(暂时叫form1吧)是全屏并且无边界的显示一副图像(这个我目前使用picturebox.image显示的),另有一个窗体(form2)在主窗体之前,其中也有一个picturebox,用来显示form1被form2遮挡的部分,并且随着form2的拖动,其中的picturebox内容也随着变化。
    我目前的思路是在form2中添加timer控件,在窗口被拖动的时候启动timer(窗体拖动的方法也是自己写的),用来刷新picturebox中的内容,显示的方法是将form1中的图像读入Bitmap backImage,之后新建一个与被遮挡部分大小相同的Bitmap frontImage,通过Bitmap.Clone的方法将要显示的区域存到frontImage中,再通过picturebox.image的方法显示出来。
    在我实验的过程中发现,这样做的效果并不是很好,图像刷新的不够流畅(不是闪烁,就是刷新的间隔不稳定,明显感觉滞后很多),不知道是不是因为拖动窗体的函数也是自己写的的原因,还是这样做就是效率不高,请问大家有什么好的方法吗?兄弟这里不胜感激。
picturebox 显示图像 刷新图像

------解决方案--------------------
多用GDI+直接绘制,不用控件,减少写内存次数,Bitmap.Clone之类的
------解决方案--------------------
双缓冲+GDI+,先在内存中绘制好然后给picturebox,还有鼠标拖动的时候最好加个判断,判断鼠标移动是不是超过5像素,如果超过则绘制,没超过则return
------解决方案--------------------
放入构造函数里   
         this.SetStyle(ControlStyles.OptimizedDoubleBuffer 
------解决方案--------------------
 ControlStyles.AllPaintingInWmPaint 
------解决方案--------------------
 ControlStyles.UserPaint, true);