GDI+ 绘图时出现不停闪烁的现象!

kongdelu2008 2010-08-19 07:13:55
我是用 GDI+画的图,在MouseMove事件中,使用invalidate 将部分区域无效时,出现了不停的闪烁的现象,不知道该如何解决这种问题,大家有没有相关解决方案呢!
...全文
192 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
kongdelu2008 2010-08-19
  • 打赏
  • 举报
回复
问题解决了,我使用的GDI+的双缓冲机制,使用3段代码来激活该功能:

SetStyle(ControlStyles.OptimizedDoubleBuffer, true);
SetStyle(ControlStyles.AllPaintingInWmPaint, true);
SetStyle(ControlStyles.UserPaint, true);

讲代码添加到构造函数或Load事件处理函数中即可;

感谢大家参与讨论,结贴给分!
jianuMan 2010-08-19
  • 打赏
  • 举报
回复
最少的方法是把图裁小 然后拉伸

双缓冲那个不好使
kongdelu2008 2010-08-19
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 jbo126 的回复:]

说的细点!否则没人能真正帮上你!!
[/Quote]

private void Cell_MouseMove(object sender, MouseEventArgs e)
{
if (e.X >= leftEdgeToY && e.Y <= this.Height - 30)
{
this.Invalidate(new Rectangle(new Point(e.X - 30, e.Y -30), new Size(200, 50)));
}
}
这就是MouseMove处理函数的代码,关键问题是,我的鼠标没有移动,它也会闪烁,就是说,鼠标没有移动,也会触发该函数,才造成了闪烁的出现!
足球中国 2010-08-19
  • 打赏
  • 举报
回复
gdi+ c# or vc



wuyq11 2010-08-19
  • 打赏
  • 举报
回复
先绘制到内存再到界面
jbo126 2010-08-19
  • 打赏
  • 举报
回复
如你所说,你在MouseMove事件中处理Rectangle,是不是还要处理刷新的问题?就是Refresh或是Invalidate了!闪烁是一定的!

一般而言,只在在满足一定条件时在需要刷新,而并不是只要鼠标一移动就要刷新,比如只有当鼠标位于某个特定区域是才刷新!!

说的细点!否则没人能真正帮上你!!
wuyq11 2010-08-19
  • 打赏
  • 举报
回复
双缓存
不要在一个thread里全部刷新
kongdelu2008 2010-08-19
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 wjq 的回复:]
双重缓冲,绘图在一个新建的内存bitmap对象上画,画完之后设置为控件的backgroundimage属性。
[/Quote]
我现在的情况是这样的,我的图像已经画好了,我需要使用Rectangle使矩形区域无效,这个Rectangle放在了MouseMove处理方法中,这样导致了矩形区域部分不停的闪烁!
wjq 2010-08-19
  • 打赏
  • 举报
回复
双重缓冲,绘图在一个新建的内存bitmap对象上画,画完之后设置为控件的backgroundimage属性。

17,741

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 .NET Framework
社区管理员
  • .NET Framework社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧