私はビットマップを使用して円を描こうとしています。以前に描画された円を保存しながら、クリック位置に新しい円のビットマップを描画します。
マウスをクリックするたびに、以前に描いた円Iが新しい位置に移動します。
私がしたいことは:マウスをクリックするたびに、クリックした位置に新しい円が作成/描画され、以前に描画された円はすべて移動せずに残ります。
私は次のコードで働いています:
using System;
using System.Drawing;
using System.Windows.Forms;
namespace multirectangle
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
SetStyle(ControlStyles.OptimizedDoubleBuffer, true);
SetStyle(ControlStyles.AllPaintingInWmPaint, true);
}
Bitmap background;
Graphics scG;
Rectangle rectangleObj;
private Point clickCurrent = Point.Empty;
private Point clickPrev = Point.Empty;
private void Form1_Load(object sender, EventArgs e)
{
background = new Bitmap(Width, Height);
rectangleObj = new Rectangle(10, 10, 30, 30);
scG = Graphics.FromImage(background);
}
private void Form1_MouseDown(object sender, MouseEventArgs e)
{
clickCurrent = PointToClient(Cursor.Position);
clickPrev = clickCurrent;
if (clickPrev == Point.Empty) return;
rectangleObj.X = clickPrev.X - rectangleObj.Height/2;// +radius;
rectangleObj.Y = clickPrev.Y - rectangleObj.Width/2;
Refresh();
}
protected override void OnPaint(PaintEventArgs pe)
{
pe.Graphics.DrawImage(Draw(), 0, 0);
}
public Bitmap Draw()
{
Graphics scG = Graphics.FromImage(background);
Pen myPen = new Pen(System.Drawing.Color.Red, 3);
scG.Clear(SystemColors.Control);
scG.DrawEllipse(myPen, rectangleObj);
return background;
}
}
}
プログラムで最後のフレームが何を描画したか分かりません。最も可能性の高い位置のリストを保持し、それらをすべてのフレームごとに描画する必要があります。 –
この 'scG.Clear'は常にビットマップをクリアします。それを削除して報告してください。これはやや複雑なものです。 – TaW