Primo Chalice Ответов: 1

Как нарисовать несколько прямоугольников на изображении в C#?


Привет,

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

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

С уважением
Аман Чаурасия

Что я уже пробовал:

Я пробовал рисовать под MouseDown, MouseMove, MouseUp и Paint events, но ни один из них, похоже, не сработал.

1 Ответов

Рейтинг:
1

Rob Philpott

Хорошо, я предполагаю, что вы находитесь в мире WinForms здесь.

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

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

Итак, начните с получения нового класса из PictureBox, это будет "специализация" PictureBox, потому что мы расширяем его функциональность. Первое, что нужно сделать, это переопределить метод OnPaint, убедитесь, что вы вызываете метод base. (), так как это нарисует картинку, но затем мы можем добавить наш собственный код рисования, чтобы перейти сверху. Вот пример, который помещает Черный квадрат поверх изображения:

public class Box : PictureBox
{
    protected override void OnPaint(PaintEventArgs pe)
    {
        // let the default draw the image
        base.OnPaint(pe);

        pe.Graphics.FillRectangle(System.Drawing.Brushes.Black, new System.Drawing.Rectangle(0, 0, Width - 100, Height - 100));
    }
}



Это отправная точка. Измените код конструктора, чтобы создать новую коробку, а не новый PictureBox.

Отсюда это просто случай добавления логики для отслеживания ваших прямоугольников и выполнения перетаскивания - поэтому вам нужно будет перехватить события мыши, определить, когда происходит отслеживание (кнопка мыши удерживается нажатой), изменить размер выбранного прямоугольника и выдать Invalidate()s. Хороший контроль также должен реагировать на клавиатуру.

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


Primo Chalice

Огромное спасибо. Я думаю, что это поможет :). Я вернусь к тебе, как только закончу. :)