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

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

14
задан the Tin Man 2 January 2012 в 20:50
поделиться

3 ответа

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

MyImage = new Bitmap(fileToDisplay);
pictureBox1.ClientSize = new Size(xSize, ySize);
pictureBox1.Image = MyImage;
0
ответ дан 1 December 2019 в 07:51
поделиться

Лучший способ - НЕ рисовать круг и линию в окне с картинками! Он не предназначен для этой цели.

Из блога Боба Пауэлла GDI +:

Корень этой проблемы в том, что фундаментальные правила программирования Windows были нарушены. И, как следствие, коробку с картинками обвиняют в том, что на самом деле не его вина. Чтобы помочь объяснить причину, четыре пункта ниже указывают на то, что пошло не так в данном случае.

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

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

  • PictureBox обновляется, отрисовывая объект на основе System.Drawing.Image, хранящийся в его свойстве Image. Если изображения нет, будет отображаться цвет фона.

  • Кража и использование объекта Graphics любого элемента управления не является хорошей практикой, его следует настоятельно не рекомендовать и нарушает правила обработки событий в нужном месте в нужное время. Обычно, если вы это сделаете, это вызовет у вас боль. Когда вы бьетесь головой о стену, вам становится больно. это знак того, что вам следует прекратить это делать. То же самое и с вызовом PictureBox.CreateGraphics.

Правильный способ сделать это.

Следование правилам системы, управляемой событиями, легко, но требует небольшой предусмотрительности. Итак, если вы хотите нарисовать немного графики и оставить ее там, когда окно перемещается перед ним и снова удаляется, или когда вы сворачиваете и восстанавливаете, вы должны обслуживать { {1}} событие Paint для любого объекта, на котором вы хотите рисовать. PictureBox несет с собой багаж, который не нужен для такого типа приложений. Если вы просто хотите нарисовать что-то в одном месте , нарисуйте это в форме, ответив на событие Form.Paint. Если вам нужен удобный заполнитель для графики, которая работает в пределах набора , используйте элемент управления Panel и обслуживайте его событие Paint.Если вы хотите, чтобы многократно дублировал графику для вашего корпоративного изображения, создайте элемент управления и выполните рисование в переопределении OnPaint.

Исходная ссылка (более недействительна): http://bobpowell.net/picturebox.htm

ПРИМЕЧАНИЕ. Исходная ссылка на блог Боба Пауэлла больше не работает. Я оставил его здесь для исторических целей. Содержание страницы все еще можно просмотреть в интернет-архиве ( https://web.archive.org/web/20120330003635/http://bobpowell.net/picturebox.htm ) на дату этот пост был отредактирован.

5
ответ дан 1 December 2019 в 07:51
поделиться

или:

    private void pictureBox1_Paint(object sender, PaintEventArgs e)
    {
        e.Graphics.DrawLine(
            new Pen(Color.Red,2f), 
            new Point(0,0), 
            new Point(pictureBox1.Size.Width, pictureBox1.Size.Height ));

        e.Graphics.DrawEllipse(
            new Pen(Color.Red, 2f),
            0,0, pictureBox1.Size.Width, pictureBox1.Size.Height  );
    }

Обработайте событие рисования графического окна и сделайте свой собственный рисунок там.

29
ответ дан 1 December 2019 в 07:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: