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