Объекты Graphics и Drawing в Windows Forms
Среда CLR использует расширенную реализацию интерфейса графических устройств Windows (GDI) под названием GDI+. С помощью GDI+ можно создавать графические элементы, рисовать текст и управлять графическими изображениями как объектами. Интерфейс GDI+ отличается высоким быстродействием и удобен в использовании. GDI+ можно использовать для отрисовки графических изображений в формах и элементах управления Windows Forms. Хотя GDI+ нельзя использовать непосредственно в веб-формах, графические изображения можно выводить через элемент управления веб-сервера Image.
В этом разделе описаны основы программирования с использованием GDI+. Хотя он не является полным справочником, в нем содержатся сведения об объектах Graphics, Pen, Brush и Color и способах выполнения таких задач, как рисование фигур, создание текста, отображение рисунков. Дополнительные сведения см. в разделе GDI + ссылку.
Если вы хотите немедленно приступить к работе, см. статью Приступая к программированию графики. Она содержит разделы, посвященные использованию кода для рисования линий, фигур, текста и других элементов в формах Windows Forms.
В этом разделе
Общие сведения о графике
Общие сведения об управляемых классах, связанных с графикой.
Управляемый код GDI+
Сведения об управляемых классах GDI+.
Использование управляемых графических классов
Демонстрируется выполнение различных задач с помощью управляемых классов GDI+.
Ссылка
System.Drawing
Доступ к основным графическим функциям GDI+.
System.Drawing.Drawing2D
Расширенные функциональные возможности для создания двухмерной и векторной графики.
System.Drawing.Imaging
Расширенный набор графических функций GDI+.
System.Drawing.Text
Расширенный набор типографических функций GDI+. Классы в этом пространстве имен позволяют создавать и использовать коллекции шрифтов.
Связанные разделы
Рисование и отрисовка пользовательского элемента управления
Подробные сведения о способах написания кода для рисования элементов управления.
How to Add Graphics to a C# Windows Form Application
See how you can draw shapes, use colors, and render images in a WinForms app.
Windows Forms is a framework that lets you build desktop applications. You can click and drag components like buttons onto a visual user interface. It also helps you manually create various shapes within your code.
This article will show you how to add lines, shapes, and images to your application. This tutorial uses the Visual Studio 2019 Community Edition to show examples.
What Are the Built-In Classes Used for Drawing Graphics?
Windows Forms uses the C# programming language. Its built-in classes and methods allow you to draw various shapes onto a Windows Form canvas. These include the Graphics, Pen, Color, and Brush classes.
The Graphics class allows you to draw shapes and lines onto the canvas. It includes methods such as:
- DrawLine(Pen, Point1, Point2)
- DrawRectangle(x, y, width, height)
- DrawPolygon(Pen, PointF[])
The Pen class allows you to specify the properties of a 'pen' tip which you can use to draw your shapes. You can specify properties such as color, thickness, or dash style. Methods include:
-
SetLineCap(LineCap, LineCap, DashCap)
A color object made up of R (red), G (green), and B (blue) values. You will need a color object for many of the built-in methods that create shapes.
SolidBrush, HatchBrush, TextureBrush
These brush classes derive from the "Brush" interface. These classes allow you to color in blank spaces on the canvas. You can also choose to fill the spaces using different patterns or textures. You can specify properties such as the color.
Rectangle, Line, Polygon, Ellipse
You can create objects based on these shapes, and use them when calling methods such as DrawRectangle(). Instead of passing the x, y, width, and height as arguments, you can choose to pass an existing Rectangle object instead.
To view the source code for a running example of the above tutorial, visit the GitHub repository. You can try out the following examples once you've created a Winforms application.
How to Add a Paint on Form Load Event Handler
First, add an event handler to draw shapes when the canvas loads.
- Add a Paint function for the form.
- Go into the Design View Tab.
- In the Properties window, select the lightning icon to open the "Events" tab.
- In "Paint", under "Appearance", select the Form1_Paint function. This will execute the function when you run the application.
How to Draw Lines Onto a Windows Form Canvas
You can use a Color, Pen, and the DrawLine() method to draw lines on a canvas.
- Inside the Form1_Paint() function, create a Color object with the color you want the line to be. Then, create a Pen object to draw the line with.
- The DrawLine() method from the Graphics class will draw a line using the pen. This will start drawing a line from an x, y position to another x, y position.
- You can modify the properties for the pen object to change its width, dash style, and start or end cap.
- Press the green play button at the top of Visual Studio to see the changes.
How to Draw Shapes Such as Rectangles and Circles
You can use the shapes classes for different shapes, or draw shapes manually onto the canvas.
- Create a Color and Pen object as shown in the previous steps. Then, use the DrawRectangle() method to create the rectangle. The arguments are the x and y coordinates for the top-left of the rectangle, along with its width and height.
- You can also create a rectangle using the Rectangle Class. First, create a Rectangle object. The arguments are also the x and y coordinates for the top-left corner, width, and height.
- Use the DrawRectangle() function to draw the rectangle. Instead of passing the x, y, width, and height like before, you can use the Rectangle object instead.
- Press the green play button at the top of Visual Studio to see the changes.
How to Use the Brush Class to Fill In Shapes With Color
You can use the FillRectangle(), FillEllipses() or FillTriangle() methods to create shapes with a solid color.
- First, create a brush object.
- Use the FillRectangle(), FillEllipses() or FillTriangle() methods. They work the same way as the draw functions above, except instead of a Pen, they use a Brush object.
How to draw in C# using the Graphics Class – CSharp Programming
How to use the Graphics class to draw to the screen in C#
The Graphics class is one of the fundamental classes used in programming with Windows Forms and GDI+. Through the Graphics class, you gain access to information about the display resolution and device capabilities. In this article, you’ll learn about the Paint event and how it supplies you regarding an adequately initialized Graphics object. This article also covers the most common operations performed using the Graphics object.
The first thing we will do is open Visual Studio and click “Create a new project” to get started. We are going to create a new Windows Form in C#. You could choose any project name you would like and its destined location on your desktop/pc.
A blank project will be generated to serve as your canvas. You could change the width and height based on your preference. The next thing we need to handle is the paint event for the form. When the form is drawing itself, it will call this paint event, and then inside of that, we will get a handle to the graphics object. Afterward, we could paint the form ourselves. It is a step-by-step process that we need to accomplish.
Declare a new graphics object with this syntax above. With this step, we could make new shapes like rectangles.
How to draw a rectangle
To draw rectangles and squares in C#, the GraphicsObject provides the DrawRectangle() method. There are two ways to use the DrawRectangle() method. We will begin by drawing a rectangle without a pre-created Rectangle object.
- The first step is to create a new brush. The syntax above is the code that you can use to alter the color and name of the brush.
- It also needs the coordinates of the rectangle you want to create. To do that, you can encode the x, y coordinates like in the syntax attached.
- Since we’ve used 100×100 as the coordinates, it came out as square, but you could change the coordinates to generate your desired shape.
For the second method
- To draw a rectangle, you will draw four lines. We will make a drawing pin and set that equal a new pen in this method. You could also set the color for your rectangle. The syntax above is the example that will generate your rectangle.
How to draw a circle
Ellipses and circles are drawn in C# using the DrawEllipse() method of the GraphicsObject class.
We made a drawing scene representing the “sun,” a circle in one of our examples.
- You could declare a “new brush” to create the round object. The syntax above shows the various brushes for different objects: the ground and the sun in the said scene.
- An ellipse will be generated using the declared sun brush and filled with this syntax in the next step.
How to draw a line
Lines are drawn in C# using the DrawLine() method of the Graphics Object. This method takes a pre-instantiated Pen object and two sets of x and y coordinates (the start and endpoints of the line) as arguments.
A “ground” was made to complete the drawing scene in the example. A straight line represents it.
Coordinates were also filled up to determine the width, height, and length to set up the ground.
The next step in this project is to try drawing a person! A stickman person, to be exact. It will be composed of a circle for its head, a line for its limbs and body.
- We added another drawing pen to change its color, white.
In the syntax above, we tried to make a whole component to make a stickman. With various lines and objects, it resulted in the image below.
The background is also changed to the color blue! And there you go, a scene with a stickman was made using simple objects and lines.
How to draw an image
To draw an image, it will require creating a bitmap from the file. To do this, the syntax below will help to run the image. We will use the image above as the background for our generated image.
The syntax above draws the image, but the problem is that our form and image aren’t the exact sizes. We could stretch the image to fit the form by doing a new rectangle.
The image will be stretched to fit the form better with this code.
We will also try to attach some images to the scene. We will do next to draw an image bitmap from the file again.
The attached image is quite big, so you could opt for a smaller size of the image you want.
This is the revised image of the cat once you’ve scaled it correctly.
Here is the complete syntax for the background and the cat. Make sure to layer your drawings correctly to make them appear in the correct order. After the cat image, we will draw the bird.
Here is the image after the code for the bird image is generated and run.
To add an extra effect, we will add a line object in the scene.
The last thing that we will add to this project is text. To include text in your image, follow this syntax below. Make sure to set a font style first!
The text is added and repeated three times. The project is done!
This article shows how various graphical objects can be drawn within a drawing programmatically using C#. It may be quite challenging, but first but with troubleshooting, patience, and creativity, you could also finish a project in no time!
как рисовать в windows forms c
В этом уроке вы приступите к изучению базовых приёмов рисования в «PictureBox». И в данном уроке будет рассмотрено то, как нарисовать линию заданной длины, цвета и в заданном месте поля «PictureBox». Для этого нам понадобятся: 4 «textBox», 1 «button», и конечно же «PictureBox». Примерный вид программы:

То, как изменить цвет фона элемента (“PictureBox”) рассматривается в этом уроке. В “textBox”ы мы будем записывать начальное и конечное значение координат поля рисования: две координаты – одна точка, ещё две координаты – ещё одна точка, которая соединяется с предыдущей, образуя отрезок, заданного в коде программы цвета. Значение каждой координаты, получаемое из текстового поля, мы будем конвертировать в «int»—Convert::ToInt32(textBox1->Text); А для хранения значения создаётся массив, его нужно объявить в верху программы: int m_p[4];

#pragma endregion private: System::Void Form1_Load(System::Object^ sender, System::EventArgs^ e) Text = «Рисуем Линию»; button1->Text = «Рисовать»; > private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) Text); m_p[2] = Convert::ToInt32(textBox2->Text); m_p[3] = Convert::ToInt32(textBox3->Text); m_p[4] = Convert::ToInt32(textBox4->Text); pictureBox1->Refresh(); > private: System::Void pictureBox1_Paint(System::Object^ sender, System::Windows::Forms::PaintEventArgs^ e) Graphics->DrawLine(System::Drawing::Pens::Green, m_p[1], m_p[2], m_p[3], m_p[4]); > >; >
Результат:
Следующий урок >>
Практическое руководство. Создание графических объектов для рисования
прежде чем рисовать линии и фигуры, отображать текст или отображать изображения с помощью GDI+, необходимо создать Graphics объект. Graphicsобъект представляет GDI+ поверхность рисования, а — объект, используемый для создания графических изображений.
Работа с графикой состоит из двух этапов.
Использование Graphics объекта для рисования линий и фигур, отображения текста или отображения изображений и управления ими.
Создание графического объекта
Графический объект может быть создан различными способами.
Создание графического объекта
Вызовите CreateGraphics метод элемента управления или формы, чтобы получить ссылку на Graphics объект, представляющий поверхность рисования этого элемента управления или формы. Используйте этот метод, если требуется рисовать на форме или элементе управления, который уже существует.
Следующие разделы содержат сведения о каждом из этих процессов.
PaintEventArgs в обработчике событий Paint
получение ссылки на объект Graphics из PaintEventArgs в событии Paint
Вставка кода для заполнения формы или элемента управления.
В следующем примере показано, как ссылаться на Graphics объект из PaintEventArgs в Paint событии.
Метод CreateGraphics
Можно также использовать CreateGraphics метод элемента управления или формы для получения ссылки на Graphics объект, представляющий поверхность рисования этого элемента управления или формы.
Создание графического объекта с помощью метода CreateGraphics
Вызовите CreateGraphics метод формы или элемента управления, для которого требуется отобразить графические объекты.
Создание из объекта Image
Кроме того, можно создать графический объект из любого объекта, производного от Image класса.
Создание графического объекта из изображения
Вызовите Graphics.FromImage метод, указав имя переменной изображения, из которой нужно создать Graphics объект.
В следующем примере показано, как использовать Bitmap объект:
Рисование фигур и изображений и управление ими
После создания Graphics объект может использоваться для рисования линий и фигур, отображения текста или отображения изображений и управления ими. Объекты Principal, используемые с Graphics объектом:
PenКласс, используемый для рисования линий, структурирования фигур или визуализации других геометрических представлений.
BrushКласс, используемый для заливки областей графических объектов, таких как заполненные фигуры, изображения или текст.
FontКласс — содержит описание фигур, используемых при отрисовке текста.
ColorСтруктура — представляет различные отображаемые цвета.
Использование созданного объекта Graphics
Для рисования нужного объекта выполните действия с соответствующим объектом, приведенным выше.
Дополнительные сведения см. в следующих разделах:
Объекты Graphics и Drawing в Windows Forms
среда clr использует расширенную реализацию Windows интерфейс графических устройств (GDI), именуемую GDI+. с помощью GDI+ можно создавать графики, рисовать текст и манипулировать графическими изображениями как объектами. GDI+ призвана обеспечить производительность и удобство использования. GDI+ можно использовать для отображения графических изображений на Windows Forms и элементах управления. хотя вы не можете использовать GDI+ непосредственно в веб-формы, графические изображения можно отображать с помощью серверного веб-элемента управления Image.
в этом разделе вы найдете разделы, в которых представлены основные принципы программирования GDI+. Хотя он не является полным справочником, в нем содержатся сведения об объектах Graphics, Pen, Brush и Color и способах выполнения таких задач, как рисование фигур, создание текста, отображение рисунков. дополнительные сведения см. в разделе справочник по GDI+.
Если вы хотите немедленно приступить к работе, см. статью Приступая к программированию графики. Она содержит разделы, посвященные использованию кода для рисования линий, фигур, текста и других элементов в формах Windows Forms.
В этом разделе
Общие сведения о графике
Общие сведения об управляемых классах, связанных с графикой.
Управляемый код GDI+
предоставляет сведения об управляемых классах GDI+.
Использование управляемых графических классов
демонстрирует выполнение различных задач с помощью управляемых классов GDI+.
Справочник
System.Drawing
Предоставляет доступ к основным графическим функциям GDI+.
System.Drawing.Drawing2D
Расширенные функциональные возможности для создания двухмерной и векторной графики.
System.Drawing.Imaging
Предоставляет расширенные графические функции GDI+.
System.Drawing.Text
Предоставляет расширенный набор типографических функций GDI+. Классы в этом пространстве имен позволяют создавать и использовать коллекции шрифтов.
Связанные разделы
Рисование и отрисовка пользовательского элемента управления
Подробные сведения о способах написания кода для рисования элементов управления.
Пользовательское рисование элементов управления — одна из многих сложных задач, которые можно с легкостью выполнить в Windows Forms. При разработке пользовательского элемента управления доступно множество параметров, которые управляют графическим отображением элемента управления. Если вы создаете настраиваемый элемент управления, то есть элемент управления, который наследуется от Control, необходимо предоставить код для преобразования его графического представления для просмотра.
При создании составного элемента управления, который является элементом управления, наследуемым от UserControl или одного из существующих элементов управления Windows Forms, можно переопределить стандартное графическое представление и предоставить собственный графический код.
Если вы хотите предоставить настраиваемый рендеринг для существующего элемента управления без создания нового элемента управления, набор параметров становится более ограниченным. Однако по-прежнему существует широкий набор возможностей графического представления ваших элементов управления и приложений.
При отрисовке элемента управления используются следующие элементы:
Рисование, предоставляемое элементом управления
Класс данных событий для события Paint, PaintEventArgs, содержит данные, необходимые для рисования элемента управления, — маркер для графического объекта и прямоугольник, представляющий область для рисования.
Graphics — это управляемый класс, который инкапсулирует функциональные возможности рисования, как описано в разделе, посвященном GDI, далее в этой статье. ClipRectangle является экземпляром структуры Rectangle и определяет доступную область, в которой можно нарисовать элемент управления. Разработчик элемента управления может вычислить ClipRectangle с помощью свойства ClipRectangle элемента управления, как описано в обсуждении геометрии далее в этой статье.
OnPaint
Элемент управления должен предоставлять логику отрисовки путем переопределения метода OnPaint, который он наследует от Control. OnPaint получает доступ к графическому объекту и прямоугольнику для рисования с помощью свойств Graphics и ClipRectangle экземпляра PaintEventArgs, переданного в него.
В следующем коде используется пространство имен System.Drawing :
Метод OnPaint базового класса Control не реализует функциональность рисования, но вызывает делегаты событий, зарегистрированные в событии Paint. При переопределении метода OnPaint обычно требуется вызвать метод OnPaint базового класса, чтобы зарегистрированные делегаты получили событие Paint. Однако элементы управления, у которых закрашена вся поверхность, не должны вызывать OnPaint базового класса, поскольку это вызовет мерцание.
Код в методе OnPaint элемента управления будет выполняться при первом рисовании элемента управления и при каждом его обновлении. Чтобы обеспечить перерисовку элемента управления при каждом изменении его размера, добавьте следующую строку в конструктор элемента управления:
OnPaintBackground
Базовый класс Control определяет другой метод, который удобен для рисования, метод OnPaintBackground.
OnPaintBackground рисует фон (и таким образом, фигуру) окна, что гарантированно будет быстрым, в то время как OnPaint закрашивает детали и может быть медленнее, поскольку отдельные запросы рисования объединяются в одно событие Paint, охватывающее все области, которые необходимо перерисовать. Может потребоваться вызвать OnPaintBackground, если, например, нужно нарисовать градиентный фон для элемента управления.
Основы GDI+
Класс Graphics предоставляет методы для рисования различных фигур, таких как круги, треугольники, дуги и эллипсы, а также методы для отображения текста. Пространство имен System.Drawing содержит пространства имен и классы, инкапсулирующие графические элементы, такие как фигуры (круги, прямоугольники, дуги и др.), цвета, шрифты, кисти и т. д.
Геометрия области рисования
Свойство ClientRectangle элемента управления указывает прямоугольную область, доступную для элемента управления на экране пользователя, а свойство ClipRectangle объекта PaintEventArgs — закрашиваемую область. Элементу управления может потребоваться закрасить только часть его доступной области, например в случае, когда изменяется небольшой раздел элемента управления. В таких ситуациях разработчик элемента управления должен вычислить фактический прямоугольник для рисования и передать его в Invalidate. Перегруженные версии Invalidate, принимающие Rectangle или Region в качестве аргумента, используют этот аргумент для создания свойства ClipRectangle элемента PaintEventArgs.
Пример рисования в C#. «Кораблик»
Нарисуем корабль, например, такой:

Ваши действия:
1) Создайте приложение Windows Forms, namespace = «Кораблик».
2) Размер формы задайте 900х500, на ней разместите визуальный объект для рисования pictureBox1, измените его свойство Dock = Fill; (он займет все пространство формы).
3) Кликнув на компоненте, вы создадите событие pictureBox1.Click и форму для метода обработки этого события pictureBox1_Click ();
4) Не забудьте добавить библиотеку System.Drawing. Ненужные библиотеки можно удалить (нужны всего три: System, System.Windows.Forms и System.Drawing).
5) В окне кода файла Form1.cs получите следующий текст:
Теперь нам осталось только написать обработчик события, добавленный нами метод pictureBox1_Click ( ), для чего вставим следующие операторы с комментариями:
В этом примере мы использовали методы класса Graphics: FillRectangle(), FillPolygon(), FillPie() и DrawEllipse(). Найдите их в таблице предыдущей статьи. Кроме того мы используем структуры Point; oбъекты-кисти класса SolidBrush; объект-перо класса Pen. Для рисования волн моря использовался цикл while, для иллюминаторов — цикл for. Полигон задается массивом точек для соединения их сплошной ломаной.
И все, программу можно проверять. Кликнув в окне, сможем увидеть наш кораблик: 
4 комментария к “Пример рисования в C#. «Кораблик»”
это делается через класс?
Да. Объект g класса Graphics объявляется в методе pictureBox1_Click(), который в свою очередь задан как метод Form1.
Рисование (после клика на pictureBox1) состоит в вызове методов класса Graphics.
А что за namespace = «Кораблик».
Имя может быть любое, даже записанное русскими буквами. Вы, когда создаете проект и выбираете его шаблон, в окне «Настроить новый проект» вместо имени по умолчанию WindowsFormsApp1 (или подобного) напишите любое другое допустимое имя, например, Океанский_лайнер, измените, если необходимо, путь к Вашему проекту, и нажмите кнопку «Создать» (проект). Весь Ваш проект теперь будет в папке Океанский_лайнер. Думаю, что это удобно. Я чаще имя пространства имен задаю двумя-тремя английскими словами, например Ocean_Liner. То есть у Вас полная свобода выбора, пишите, как Вам удобно, важно, чтобы новые компоненты проекта находились в этом namespace или были подключены через директиву using (как System и другие).