GDI+绘图过程中的抖屏

GDI+绘图过程中的抖屏

问题:

使用Panel画板画图,使用定时器刷新,出现抖屏或者闪动现象。

原因

  • 在一般情况下,我们通常使用的是WF自己本身进行GDI绘制,出现抖动或者出现闪动时,直接将WF中的属性DoubleBuffered()属性改为True。
  • 但是有些情况,我们是希望在自己自定义的Panel中进行GDI+绘制以及定时器制作动画。这时,Pannel本身并没有这样的属性。我们就想办法去自定义,也就是说,这个成了解决问题的核心。具体怎么来解决呢,请看解决方案。

解决方案

  • 在Form类中定义双缓存类DoubleBufferPanel继承Pannel类
    /// <summary>
    /// 双缓冲panel
    /// </summary>
    public class DoubleBufferPanel : Panel
    {
       public DoubleBufferPanel()
       {
          this.SetStyle(ControlStyles.AllPaintingInWmPaint | //不擦除背景 ,减少闪烁
               ControlStyles.OptimizedDoubleBuffer | //双缓冲
               ControlStyles.UserPaint, //使用自定义的重绘事件,减少闪烁
               true);
       }
    }
  • 然后在*.designer.cs中找到实例化Panel类的位置,将其更新。
    - private System.Windows.Forms.Panel panel;
    - this.panel = new System.Windows.Forms.Panel();
    + private DoubleBufferPanel panel;
    + this.panel = new DoubleBufferPanel();
这样搞的话,这个问题就被完美的解决了!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值