1

私はC#でグラフィックスクラスの多くを勉強していませんが、日々の楽しい時間(時間を渡すためのコーディング)のためにそれが必要であることに気づきました。

描画されたグラフィックを(フォームに表示される前に)保存して、セグメント全体を1つずつ描画するのではなく、同時に描画できるようにする方法があるかどうかを知りたいだけです。Graphicsセグメントとは、クラスを使用して描画可能な形状のコレクションを意味します。

.FillRectangle言い換えれば、、または同等のものを呼び出して画面に表示する前に、これらすべてを描画しようとしています。

また、GDI +などの既存の方法を使用せずにグラフィックを描画する既知の方法はありますか?

私が何かを逃したならば、私に知らせてください。

コードの編集:

      using (Graphics formGraphics = df.CreateGraphics())
        {
            this.DoubleBuffered = true;
            foreach (Dot d in memmap)
            {
                c = Color.FromArgb(d.r, d.g, d.b);
                using (SolidBrush brush = new SolidBrush(c))
                {
                    formGraphics.FillRectangle(brush, d.x, d.y, 1, 1);
                }
            }
            this.DoubleBuffered = false;
        }
4

1 に答える 1

0

DoubleBuffered プロパティを常に true のままにし、フレームワークに処理させると、あなたがしていたことはうまくいくはずです。あなたはそれを試しましたか?とにかく、私はより多くの制御を行い、コードにダブル バッファーを作成することを好みます。

using
(
    var bufferedGraphics = BufferedGraphicsManager.Current.Allocate(formGraphics, 
      new Rectangle(0, 0, width, height));
)
{
    //Draw with bufferendGraphics.Graphics
    bufferedGraphics.Render();
}

formGraphics上記のコードは、実行中に と を有効にしておくと、もう少し最適化できますbufferendGraphicsが、リークが発生するため、 from を閉じる前にそれらを破棄する必要があります。

ところで、なぜ CreateGraphics を使用しているのですか? フォームの OnPaint をオーバーライドし、PaintEventArgs からグラフィックを取得します。

于 2013-02-04T08:45:09.677 に答える