2

我有一个在位图上绘制一些项目的控件。

我正在使用 Microsoft 手势库来滚动和平移位图。

在进行平移或滚动时,我的位图闪烁很多。

我只是OnPaint根据滚动/平移坐标在方法中绘制位图的一部分。

以下是示例代码:

protected override void OnPaint(PaintEventArgs e)
        {
            using (Graphics g = e.Graphics)
            {
                if (!_painted)
                {
                    // drawing items first time
                    InitilizeBitmap(g);                 
                    _painted = true;
                }           

                Rectangle rec = new Rectangle(0, _bitmapLocation.Y, ClientRectangle.Width, ClientRectangle.Height);
                using (Graphics gCached = Graphics.FromImage(_cachedBitmap))
                {
                    gCached.Clear(BackColor);
                    gCached.DrawImage(_bmpControl, 0, 0, rec, GraphicsUnit.Pixel);
                }

                g.DrawImage(_cachedBitmap, 0, 0);
            }
        }

        protected override void OnPaintBackground(PaintEventArgs e)
        {

        }

有没有办法避免闪烁?

4

1 回答 1

1

问题是您只使用 1 个缓冲区,因此绘制操作会立即出现。您需要的是翻页/双缓冲。

您要做的是设置一个新的图形对象,您可以在该对象上进行所有绘图,然后在完成后绘制完成的对象。这应该消除任何闪烁,因为面向屏幕的位图只更新一次,并且一次完成。

于 2012-08-21T14:20:04.377 回答