-1

重複の可能性:
C#でパネルをダブルバッファリングするにはどうすればよいですか?
グラフィックの描画とスクロールのためのC#パネル

パネルにビットマップを描画します。同じパネルでズームを使用します。ズームしている間、パネルは継続的にちらつきます。パネルにDoubleBufferedプロパティがないのはなぜですか?

コード:

                Graphics g = Graphics.FromHwnd(panel.Handle);
                if (newImage == true)
                {
                    g.Clear(SystemColors.Control);
                    newImage = false;
                }

                g.DrawImage(bmp, hOffset, vOffset);
                g.Dispose();
4

4 に答える 4

1

このコードをコンストラクター内に追加します

this.SetStyle(ControlStyles.AllPaintingInWmPaint |ControlStyles.UserPaint |ControlStyles.DoubleBuffer, true);
于 2011-05-11T11:51:30.583 に答える
1

これを使って。

System.Drawing.BufferedGraphics

私はゲーム開発者です.ゲームでは、最初にすべてのオブジェクトをバックバッファに描画し、次にそれをフロントバッファにコピーまたは反転します.

System.Drawing.BufferedGraphics

バックバッファとしてグラフィックス オブジェクトにレンダリングします。

System.Drawing.Graphics

例えば:

        System.Drawing.Graphics g = this.CreateGraphics();
        System.Drawing.BufferedGraphicsContext dc = new BufferedGraphicsContext();
        BufferedGraphics backbuffer = dc.Allocate(g, new Rectangle(new Point(0, 0), g.VisibleClipBounds.Size.ToSize()));
        backbuffer.Graphics.DrawImage(Image.FromFile(@"c:\test.jpg"), new Point(10, 10));
        backbuffer.Render(g);
于 2011-05-11T11:47:50.750 に答える
0

ビットマップをどこにペイントしていますか?

PaintイベントまたはOnPaintオーバーライドにない場合は、間違っています。

あなたの質問に答えるために、フォームだけがDoubleBufferedプロパティ IIRC を持っています。

于 2011-05-11T11:45:21.900 に答える
-2

100% 確実ではありませんが、代わりにフォーム/ウィンドウで DoubleBuffered をアクティブにすることはできませんか?

そして、多くのエフェクトでGUIを使用する場合の1つのヒントは、winformsの代わりにWPFを使用することです..

OnPaint と OnPaintBackground をオーバーライドすることもできます。

于 2011-05-11T11:47:28.983 に答える