1

図形を描画するときに、マウスを押しているときに画面上で「プレビュー」されるMSペイントの効果を模倣しようとしています。

非常に簡単です:

    private Bitmap lastCanvas;                

    private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
    {
         lastCanvas = new Bitmap(pictureBox1.image);

         gr = Graphics.FromImage(pictureBox1.Image);

         start = e.Location;
         gr.DrawRectangle(myPen, start.X, start.Y, 0, 0);
         pictureBox1.Refresh();
    }

    private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
    {   
        if (e.Button == MouseButtons.Left)
        {
            pictureBox1.Image = lastCanvas;

            gr = Graphics.FromImage(pictureBox1.Image);

            gr.DrawRectangle(myPen, start.X, start.Y, e.Location.X - start.X, e.Location.Y - start.Y);
            pictureBox1.Refresh();
        }
    }

問題は、「lastCanvas」が適切に保存されていないように見えることです。これは、これまでに描画されたすべてのものを取得して保存する試みです。これにより、マウスドラッグが発生しているときに、長方形の「プレビュー」が描画される前に再描画できます。何らかの理由で、ビットマップをコピーして再表示することができません。古いキャンバスを保存して、マウスを動かすたびに復元しているにもかかわらず、すべての「プレビュー」長方形が画面上に構築されます。

どんな助けでも大歓迎です。

4

1 に答える 1

0

私が起こっていると私が信じているのは、pictureBox1それがあなたのイベントハンドラーlastCanvasで同じことを参照しているということです。pictureBox1_MouseMove

このコードは、画像とlastCanvasをメモリ内の同じオブジェクトに設定します

pictureBox1.Image = lastCanvas;

作成したオブジェクトに画像を描画すると、GraphicslastCanvasも更新されます。Cloneあなたはビットマップをしなければならないかもしれません。

于 2012-10-03T03:57:22.387 に答える