0

我在活动中画了一幅e.Graphics.DrawImage图像Form_Paint()。我使用 aTimer来刷新表单。问题是动画闪烁。看来更新时间太长了e。我PictureBox在表格中有 2 个。

想法?

更新:

    public Bitmap Paint(int state, Graphics g)
    {
        this.state = state;

        Bitmap temp;
        Graphics tempGraphics;
        temp = new Bitmap(45, 47, g);
        tempGraphics = Graphics.FromImage(temp);

        switch (state)
        {
            case 0:
                tempGraphics.DrawImageUnscaled(img, x, y);
                break;

            case 1:
                tempGraphics.DrawImageUnscaled(img, x, y - 42);
                break;
        }
    }

这会在将精灵添加到表单之前准备好精灵。

4

3 回答 3

1

通常管理的方式是将更新绘制到内存中的位图。然后将位图绘制到屏幕上。过程较慢(因为还有更多工作要做),但看起来更快,因为没有闪烁。

但是,许多控件实际上会自动为您执行此操作。研究双缓冲技术

于 2012-11-30T23:49:01.347 回答
0

在大多数情况下,它是由于未正确设置样式而导致的,因此首先绘制背景(通常是白色)然后绘制图像。

如果仅绘制缓冲区不够快,还可以搜索/读取双缓冲。

于 2012-11-30T23:49:09.147 回答
0

我通过避免在表单本身上做任何动画来解决这个问题。如果您将控件添加到表单,然后为父级设置动画,则您过度执行 UI 线程。最好的解决方案是将所有动画保存在图片框中。

所以:你要么直接使用动画,g.DrawImage()要么坚持使用PictureBox.

于 2012-12-04T00:15:42.900 回答