Я хочу нарисовать Square on Image не прямоугольник, когда я выполняю операцию перемещения мыши в верхнюю, левую, нижнюю, правую сторону. Высота и ширина будут увеличиваться одинаковой длины.
ниже мой код он не отображает квадрат Я хочу точный код для Square
public Form1()
{
InitializeComponent();
}
Rectangle currRect;
Point endPoint;
bool isDrag;
Point startPoint;
private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
{
startPoint = new Point(e.X, e.Y); //
if (e.Button == MouseButtons.Left)
{
currRect = new Rectangle();
currRect.X = startPoint.X;
currRect.Y = startPoint.Y;
isDrag = true;
}
}
private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
{
if (isDrag)
{
endPoint = new Point(e.X, e.Y);
currRect.Width = endPoint.X - startPoint.X;
currRect.Height = endPoint.Y - startPoint.Y;
}
}
private void pictureBox1_MouseUp(object sender, MouseEventArgs e)
{
isDrag = false;
Graphics graphics = this.pictureBox1.CreateGraphics();
graphics.DrawRectangle(new Pen(Brushes.Red), currRect.X, currRect.Y, currRect.Width, currRect.Height);
}
также одно, когда я собираюсь увеличить размер квадрата своей начальной точки, или мы можем сказать, что его верхний, левый координаты остаются постоянными или постоянными, когда я увеличиваю верхние, левые, нижние и правые направления.
эта начальная точка нестабильна, когда я перемещаю курсор мыши, ее начальная точка меняет настройки, я не хочу этого, поэтому, пожалуйста, помогите мне разобраться в этой ситуации
Ваш код рисует прямоугольник, а не квадрат. Если вы хотите нарисовать квадрат, вам нужно сделать ширину и высоту одинаковыми.
Если вы измените свой метод pictureBox1_MouseMove
, вы можете нарисовать квадрат с длиной, равной максимальной ширине и высоте:
private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
{
if (isDrag)
{
endPoint = new Point(e.X, e.Y);
int maxLength = Math.Max(endPoint.X - startPoint.X, endPoint.Y - startPoint.Y);
currRect.Width = maxLength;
currRect.Height = maxLength;
}
}
EDIT: Вот решение, которое вы можете использовать для рисования вашего квадрата в любом направлении:
private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
{
if (isDrag)
{
endPoint = new Point(e.X, e.Y);
currRect.X = Math.Min(startPoint.X, endPoint.X);
currRect.Y = Math.Min(startPoint.Y, endPoint.Y);
int maxLength = Math.Max(Math.Abs(startPoint.X - endPoint.X), Math.Abs(startPoint.Y - endPoint.Y));
currRect.Width = maxLength;
currRect.Height = maxLength;
}
}
замещать
graphics.DrawRectangle(new Pen(Brushes.Red), currRect.X, currRect.Y, currRect.Width, currRect.Height);
От:
graphics.DrawRectangle(new Pen(Brushes.Red), currRect.X, currRect.Y, Math.Min(currRect.Width, currRect.Height), Math.Min(currRect.Width, currRect.Height));
Во-вторых, я не вижу, как меняется исходная точка?