Как я рисую круг и строку в поле изображения?
блок изображений является элементом управления и имеет изображение в качестве источника, поэтому вам нужно нарисовать изображение и передать изображение элементу управления, чтобы его показать.
MyImage = new Bitmap(fileToDisplay);
pictureBox1.ClientSize = new Size(xSize, ySize);
pictureBox1.Image = MyImage;
Лучший способ - НЕ рисовать круг и линию в окне с картинками! Он не предназначен для этой цели.
Из блога Боба Пауэлла 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 ) на дату этот пост был отредактирован.
или:
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 );
}
Обработайте событие рисования графического окна и сделайте свой собственный рисунок там.