c# - 在 .Net Compact Framework 中绘图时控制闪烁

标签 c# compact-framework

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

我正在使用 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)
        {

        }

有没有办法避免闪烁?

最佳答案

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

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

关于c# - 在 .Net Compact Framework 中绘图时控制闪烁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12056678/

相关文章:

c# - 如何根据条件将 var 指定为两种不同类型之一?

c# - SOLID 原则以及如何实际实现它们

c# - SQL Server CE 或 Access for a portable database with c#?

c# - WinForms:如何使用 AutoScroll 避免水平滚动条?

c# - 使用反射的 Dapper 与 ADO.Net 哪个更快?

C#: new file() - 根保存位置在哪里?

java - 如何使用 Visual Basic 向需要字符串的服务器发出 POST 请求?

c# - 如何使用 Windows Mobile 6.1 - Compact Framework 捕获 PDA 的所有硬件 key ?

c# - 如何使用c#移动到word中的下一部分

windows-mobile - 如何将使用 ShowDialog 显示的表单中的消息附加到 Application2?