日期:2014-05-19  浏览次数:20809 次

如何在窗体中无闪烁的使移动图片?
在做一个窗体应用程序,需要在窗体中显示一张图片,这张图片需要从窗体的一边运动到另一边,需要无闪烁的运动过去.

请问需要用什么控件来承载图片,怎样保证图片无闪烁的运动?

http://topic.csdn.net/t/20051009/13/4314266.html问题和这个基本相同,但这个是VC的,看不懂.

请指教!


------解决方案--------------------
闪烁的原理是人眼错觉间歇问题
只要控制好重绘的坐标差和速度,这是个经验问题。
重绘需要研究system.Drawing以及其相关类
.net控件有托放属性,如果你直接调用Control的拖放个闪烁是难免的。也是不可控制的,你只能约束你的图片。
------解决方案--------------------
DoubleBuffered = true; // 在所绘制的窗体中开个双缓冲看看
------解决方案--------------------
如果在onpaint事件里画的话,先在内存中画好,最后直接贴出来;
如果用图片的话,最好用两张图交替现实,后一种显示后,前一种在消失
------解决方案--------------------
//下面三行最好在ControlToPaint的顶端定义
bitmap bmpBuffer=new bitmap(ControlToPaint.width,ControlToPaint.height);
graphics grBuffer=graphics.fromimage(bmpBuffer);
graphics grControlToPaint=ControlToPaint.CreatGraphics();
//需要画图在bmpBuffer里画
grBuffer.drawimage(...);
//然后把bmpBuffer画到ControlToPaint里就是自己做的双缓冲了
grControlToPaint.DrawImage(bmpBuffer,0,0);

//另外:DoubleBuffered = true;这个做法实现的效果不理想!!!
------解决方案--------------------
楼主你的调试代码是怎样的?
------解决方案--------------------

//下面三行最好在ControlToPaint的顶端定义
bitmap bmpBuffer=new bitmap(ControlToPaint.width,ControlToPaint.height);
graphics grBuffer=graphics.fromimage(bmpBuffer);
graphics grControlToPaint=ControlToPaint.CreatGraphics();
//需要画图在bmpBuffer里画
grBuffer.drawimage(...);
//然后把bmpBuffer画到ControlToPaint里就是自己做的双缓冲了
grControlToPaint.DrawImage(bmpBuffer,0,0);

//另外:DoubleBuffered = true;这个做法实现的效果不理想!!!


用这个方法不错!以前用过!