Я хочу нарисовать квадрат на картинке C #

1

Я хочу нарисовать 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);

    }

также одно, когда я собираюсь увеличить размер квадрата своей начальной точки, или мы можем сказать, что его верхний, левый координаты остаются постоянными или постоянными, когда я увеличиваю верхние, левые, нижние и правые направления.

эта начальная точка нестабильна, когда я перемещаю курсор мыши, ее начальная точка меняет настройки, я не хочу этого, поэтому, пожалуйста, помогите мне разобраться в этой ситуации

Теги:
winforms

2 ответа

2
Лучший ответ

Ваш код рисует прямоугольник, а не квадрат. Если вы хотите нарисовать квадрат, вам нужно сделать ширину и высоту одинаковыми.

Если вы измените свой метод 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;
    }
}
  • 0
    спасибо за ответ, когда, когда я нажимаю кнопку мыши и двигаю мышь в любом направлении, ее начальная точка квадрата остается, поскольку это то, что я могу сделать для этого ...
  • 2
    Начальная точка устанавливается при нажатии кнопки мыши, и она остается прежней. Это кажется нормальным для меня. Как вы хотите, чтобы это работало?
Показать ещё 3 комментария
1

замещать

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));

Во-вторых, я не вижу, как меняется исходная точка?

  • 0
    всякий раз, когда я постоянно перемещаю мышь в любое место в графическом окне, начальная точка квадрата меняется.
  • 0
    Я попробовал код еще раз, верхний левый угол остается в том же месте. Не могли бы вы рассказать о проблеме, с которой вы столкнулись. Возможно, диаграмма или изображение помогут.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню