Я пытаюсь рисовать круги с помощью растрового изображения.Рисование нового растрового изображения круга в месте щелчка при сохранении ранее нарисованных кругов
Каждый раз, когда я нажимаю на мышь, круг, который я ранее рисовал, перемещается в новое положение.
Я хочу, чтобы это произошло: каждый раз, когда я нажимаю на мышь, новый или новый круг создается в позиции, которую я нажал, и все ранее нарисованные круги остаются без движения.
Я работаю со следующим кодом:
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