Рисование фигур и изображений и управление ими
После создания объекта Graphics его можно использовать для рисования линий и фигур, отображения текста или изображения и управления ими. Ниже представлены основные объекты, используемые с объектом Graphics.
Класс Pen — служит для рисования линий, контуров и отрисовки других геометрических объектов.
Класс Brush — служит для заливки областей, например фигур, изображений или текста.
Класс Font — содержит описание фигур, которые должны использоваться при отображении текста.
Структура Color — содержит различные цвета.
Использование созданного объекта Graphics
Используйте перечисленные выше объекты, чтобы рисовать нужные изображения.
Создание пера
В этом примере создается объект Pen.
Пример
-------
Надежное программирование
После завершения использования объектов, которые потребляют ресурсы системы, например объектов Pen, необходимо вызвать для этих объектов метод Dispose.
How to: Set the Color of a Pen
This example changes the color of a pre-existing Pen object
Example
myPen.Color = System.Drawing.Color.PeachPuff; |
Compiling the Code
This example requires:
A Pen object named
myPen
.
Robust Programming
You should call Dispose on objects that consume system resources (such as Pen objects) after you are finished using them.
How to: Create a Solid Brush
This example creates a SolidBrush object that can be used by a Graphics object for filling shapes.
Example
System.Drawing.SolidBrush myBrush = new System.Drawing.SolidBrush(System.Drawing.Color.Red); System.Drawing.Graphics formGraphics; formGraphics = this.CreateGraphics(); formGraphics.FillEllipse(myBrush, new Rectangle(0, 0, 200, 300)); myBrush.Dispose(); formGraphics.Dispose(); |
Robust Programming
After you have finished using them, you should call Dispose on objects that consume system resources, such as brush objects.
Установка цвета фона для пера
В этом примере для уже созданного объекта Pen задается цвет.
Пример
------
Компиляция кода
Для этого примера требуются следующие компоненты.
Объект Pen с именем
myPen
.
Надежное программирование
После завершения использования объектов, которые потребляют ресурсы системы, например объектов Pen, необходимо вызвать для этих объектов метод Dispose.
Создание сплошной кисти
Этот пример создает объект SolidBrush, который может использоваться объектом Graphics для заливки фигур.
Пример
------
Надежное программирование
После завершения использования объектов, которые потребляют ресурсы системы, например объектов кистей, необходимо вызвать для этих объектов метод Dispose.
How to: Draw a Line on a Windows Form
This example draws a line on a form.
Example
System.Drawing.Pen myPen = new System.Drawing.Pen(System.Drawing.Color.Red); System.Drawing.Graphics formGraphics; formGraphics = this.CreateGraphics(); formGraphics.DrawLine(myPen, 0, 0, 200, 200); myPen.Dispose(); formGraphics.Dispose(); |
Compiling the Code
You cannot call this method in the Load event handler. The drawn content will not be redrawn if the form is resized or obscured by another form. To make your content automatically repaint, you should override the OnPaint method.
Robust Programming
You should always call Dispose on any objects that consume system resources, such as Pen and Graphics objects.
Рисование линии в Windows Forms
В этом примере на форме рисуется линия.
Пример
------
Компиляция кода
Этот метод нельзя вызывать в обработчике события Load. Если размер формы был изменен или форма была скрыта другой формой, рисунок перерисовываться не будет. Чтобы выполнять перерисовку автоматически, нужно переопределить метод OnPaint.
Надежное программирование
Для любого объекта, потребляющего системные ресурсы (например для объектов Pen и Graphics), всегда нужно вызывать метод Dispose.
How to: Draw an Outlined Shape
This example draws outlined ellipses and rectangles on a form.
Example
private void DrawEllipse() { System.Drawing.Pen myPen = new System.Drawing.Pen(System.Drawing.Color.Red); System.Drawing.Graphics formGraphics; formGraphics = this.CreateGraphics(); formGraphics.DrawEllipse(myPen, new Rectangle(0, 0, 200, 300)); myPen.Dispose(); formGraphics.Dispose(); }
private void DrawRectangle() { System.Drawing.Pen myPen = new System.Drawing.Pen(System.Drawing.Color.Red); System.Drawing.Graphics formGraphics; formGraphics = this.CreateGraphics(); formGraphics.DrawRectangle(myPen, new Rectangle(0, 0, 200, 300)); myPen.Dispose(); formGraphics.Dispose(); } |
Compiling the Code
You cannot call this method in the Load event handler. The drawn content will not be redrawn if the form is resized or obscured by another form. To make your content automatically repaint, you should override the OnPaint method.
Robust Programming
You should always call Dispose on any objects that consume system resources, such as Pen and Graphics objects.
Рисование линии или контурной фигуры
В этом примере на форме рисуются контуры эллипса и прямоугольника.
Пример
-------
Компиляция кода
Этот метод нельзя вызывать в обработчике события Load. Если размер формы был изменен или форма была скрыта другой формой, рисунок перерисовываться не будет. Чтобы выполнять перерисовку автоматически, нужно переопределить метод OnPaint.
Надежное программирование
Для любого объекта, потребляющего системные ресурсы (например для объектов Pen и Graphics), всегда нужно вызывать метод Dispose.
How to: Draw a Filled Rectangle on a Windows Form
This example draws a filled rectangle on a form.
Example
System.Drawing.SolidBrush myBrush = new System.Drawing.SolidBrush(System.Drawing.Color.Red); System.Drawing.Graphics formGraphics; formGraphics = this.CreateGraphics(); formGraphics.FillRectangle(myBrush, new Rectangle(0, 0, 200, 300)); myBrush.Dispose(); formGraphics.Dispose(); |
Compiling the Code
You cannot call this method in the Load event handler. The drawn content will not be redrawn if the form is resized or obscured by another form. To make your content automatically repaint, you should override the OnPaint method.
Robust Programming
You should always call Dispose on any objects that consume system resources, such as Brush and Graphics objects.
Рисование заполненного прямоугольника в Windows Forms
В этом примере на форме рисуется залитый прямоугольник.
Пример
--------
Компиляция кода
Этот метод нельзя вызывать в обработчике события Load. Если размер формы был изменен или форма была скрыта другой формой, рисунок перерисовываться не будет. Чтобы выполнять перерисовку автоматически, нужно переопределить метод OnPaint.
Надежное программирование
Для любого объекта, потребляющего системные ресурсы (например для объектов Brush и Graphics), всегда нужно вызывать метод Dispose.
How to: Draw a Filled Ellipse on a Windows Form
This example draws a filled ellipse on a form.
Example
System.Drawing.SolidBrush myBrush = new System.Drawing.SolidBrush(System.Drawing.Color.Red); System.Drawing.Graphics formGraphics; formGraphics = this.CreateGraphics(); formGraphics.FillEllipse(myBrush, new Rectangle(0, 0, 200, 300)); myBrush.Dispose(); formGraphics.Dispose(); |
Compiling the Code
You cannot call this method in the Load event handler. The drawn content will not be redrawn if the form is resized or obscured by another form. To make your content automatically repaint, you should override the OnPaint method.
Robust Programming
You should always call Dispose on any objects that consume system resources, such as Brush and Graphics objects.
Рисование заполненного эллипса в Windows Forms
В этом примере на форме рисуется заполненный эллипс.
Пример
-----
Компиляция кода
Этот метод нельзя вызывать в обработчике события Load. Если размер формы был изменен или форма была скрыта другой формой, рисунок перерисовываться не будет. Чтобы выполнять перерисовку автоматически, нужно переопределить метод OnPaint.
Надежное программирование
Для любого объекта, потребляющего системные ресурсы (например для объектов Brush и Graphics), всегда нужно вызывать метод Dispose.
How to: Draw Text on a Windows Form
The following code example shows how to use the DrawString method of the Graphics to draw text on a form. Alternatively, you can use TextRenderer for drawing text on a form.
Example
public void DrawString() { System.Drawing.Graphics formGraphics = this.CreateGraphics(); string drawString = "Sample Text"; System.Drawing.Font drawFont = new System.Drawing.Font("Arial", 16); System.Drawing.SolidBrush drawBrush = new System.Drawing.SolidBrush(System.Drawing.Color.Black); float x = 150.0F; float y = 50.0F; System.Drawing.StringFormat drawFormat = new System.Drawing.StringFormat(); formGraphics.DrawString(drawString, drawFont, drawBrush, x, y, drawFormat); drawFont.Dispose(); drawBrush.Dispose(); formGraphics.Dispose(); } |
Compiling the Code
You cannot call the DrawString method in the Load event handler. The drawn content will not be redrawn if the form is resized or obscured by another form. To make your content automatically repaint, you should override the OnPaint method.
Robust Programming
The following conditions may cause an exception:
The Arial font is not installed.
Отрисовка текста в Windows Forms
В следующем примере показано, как использовать метод DrawString класса Graphics для отрисовки текста на форме. Для вывода текста на форму можно также использовать объект TextRenderer.
Пример
--------
Компиляция кода
Метод DrawString нельзя вызывать в обработчике события Load. Если был изменен размер формы или форма была скрыта другой формой, рисунок перерисовываться не будет. Чтобы выполнять перерисовку автоматически, нужно переопределить метод OnPaint.
Надежное программирование
Исключение может возникнуть при следующих условиях.
В системе не установлен шрифт Arial.
How to: Draw Vertical Text on a Windows Form
The following code example shows how to draw vertical text on a form by using the DrawString method of Graphics.
Example
public void DrawVerticalString() { System.Drawing.Graphics formGraphics = this.CreateGraphics(); string drawString = "Sample Text"; System.Drawing.Font drawFont = new System.Drawing.Font("Arial", 16); System.Drawing.SolidBrush drawBrush = new System.Drawing.SolidBrush(System.Drawing.Color.Black); float x = 150.0F; float y = 50.0F; System.Drawing.StringFormat drawFormat = new System.Drawing.StringFormat(); drawFormat.FormatFlags = StringFormatFlags.DirectionVertical; formGraphics.DrawString(drawString, drawFont, drawBrush, x, y, drawFormat); drawFont.Dispose(); drawBrush.Dispose(); formGraphics.Dispose(); } |
Compiling the Code
You cannot call this method in the Load event handler. The drawn content will not be redrawn if the form is resized or obscured by another form. To make your content automatically repaint, you should override the OnPaint method.
Robust Programming
The following conditions may cause an exception:
The Arial font is not installed.
Рисование текста по вертикали в Windows Forms
В следующем примере кода показано, как с помощью метода DrawString класса Graphics рисовать на форме текст по вертикали.
Пример
-----
Компиляция кода
Этот метод нельзя вызывать в обработчике события Load. Если размер формы был изменен или форма была скрыта другой формой, рисунок перерисовываться не будет. Чтобы выполнять перерисовку автоматически, нужно переопределить метод OnPaint.
Надежное программирование
Исключение может возникнуть при следующих условиях.
В системе не установлен шрифт Arial.
How to: Render Images with GDI+
You can use GDI+ to render images that exist as files in your applications. You do this by creating a new object of an Image class (such as Bitmap), creating a Graphics object that refers to the drawing surface you want to use, and calling the DrawImage method of the Graphics object. The image will be painted onto the drawing surface represented by the graphics class. You can use the Image Editor to create and edit image files at design time, and render them with GDI+ at run time.
To render an image with GDI+
Create an object representing the image you want to display. This object must be a member of a class that inherits from Image, such as Bitmap or Metafile. An example is shown:
// Uses the System.Environment.GetFolderPath to get the path to the
// current user's MyPictures folder.
Bitmap myBitmap = new Bitmap
(System.Environment.GetFolderPath
(System.Environment.SpecialFolder.MyPictures));
Create a Graphics object that represents the drawing surface you want to use.
// Creates a Graphics object that represents the drawing surface of
// Button1.
Graphics g = Button1.CreateGraphics();
Call the DrawImage of your graphics object to render the image. You must specify both the image to be drawn, and the coordinates where it is to be drawn.
-
g.DrawImage(myBitmap, 1, 1);
Вывод изображений с использованием GDI+
GDI+ можно использовать для вывода изображений, которые существуют в приложении в качестве файлов. Это осуществляется путем создания объекта класса Image (например объекта Bitmap), создания объекта Graphics, который ссылается на поверхность рисования, и вызова метода DrawImage объекта Graphics. Изображение будет выведено на поверхность рисования, предоставленную графическим классом. С помощью редактора изображений можно создавать и редактировать файлы изображений в режиме разработки и отображать их с использованием GDI+ в режиме выполнения.
Вывод изображения с помощью GDI+
Создайте объект, представляющий изображение для вывода. Этот объект должен быть членом класса, наследуемого от Image, например Bitmap или Metafile. Ниже приведен пример.
------
Создайте объект Graphics, представляющий поверхность рисования для использования.
----
Вызовите метод DrawImage графического объекта, чтобы вывести изображение. Следует указать изображение и координаты для его отображения.
------
How to: Create a Shaped Windows Form
This example gives a form an elliptical shape that resizes with the form.
Example
protected override void OnPaint(System.Windows.Forms.PaintEventArgs e) { System.Drawing.Drawing2D.GraphicsPath shape = new System.Drawing.Drawing2D.GraphicsPath(); shape.AddEllipse(0, 0, this.Width, this.Height); this.Region = new System.Drawing.Region(shape); }
|
Compiling the Code
This example requires:
References to the System.Windows.Forms and System.Drawing namespaces.
This example overrides the OnPaint method to change the shape of the form. To use this code, copy the method declaration as well as the drawing code inside the method.
- Объекты Graphics и Drawing в Windows Forms
- Обзор графических возможностей
- Интерфейс управляемых классов
- Три категории графических служб
- Двухмерная векторная графика
- Рисунки
- Типографская разметка
- Структура интерфейса Graphics
- Важные классы
- Прямые и кривые линии и фигуры
- Общие сведения о векторной графике
- Методы рисования с помощью графических объектов
- Рисование линии
- Создание объекта Pen
- Штриховые линии и завершения отрезков
- Рисование прямоугольника
- Рисование эллипса
- Рисование дуги
- Рисование многоугольника
- Физические и математические сплайны
- Рисование сплайнов Безье
- Применение контуров
- Сплошные кисти
- Штриховые кисти
- Текстурные кисти
- Градиентные кисти
- Управляемый интерфейс для кривых
- Использование областей
- Задание области обрезки
- Сглаживание прямых и кривых линий
- Неровности
- Сглаживание
- Работа с растровыми и векторными изображениями с использованием классов Image, Bitmap и Metafile
- Типы точечных рисунков
- Форматы графических файлов
- Форматы метафайлов
- Типы файлов и клонирование
- Варианты DrawImage
- Системы координат и преобразования
- Типы систем координат
- Преобразования и системы координат
- Матричное представление преобразований
- Составные преобразования
- Глобальные и локальные преобразования
- Глобальные преобразования
- Локальные преобразования
- Использование управляемых графических классов Приступая к программированию графики
- Создание объектов Graphics для рисования
- Создание объекта Graphics
- PaintEventArgs в обработчике события Paint
- Получение ссылки на объект Graphics из объекта PaintEventArgs в событии Paint
- Рисование фигур и изображений и управление ими
- Создание фигурной формы Windows Forms
- Компиляция кода
- Копирование пикселов для уменьшения эффекта дрожания изображения в Windows Forms
- Компиляция кода
- Рисование линий и фигур с помощью пера
- Рисование линий с помощью пера
- Компиляция кода
- Рисование прямоугольников с помощью пера
- Компиляция кода
- Задание толщины и выравнивания пера
- Изменение толщины пера
- Изменение выравнивания пера
- Создание вложенного пера
- Рисование линий с наконечниками
- Компиляция кода
- Соединение линий
- Компиляция кода
- Рисование пользовательских пунктирных линий
- Компиляция кода
- Рисование линии с текстурным заполнением
- Компиляция кода
- Использование кисти для заливки фигур
- Заливка фигуры сплошным цветом
- Компиляция кода
- Штриховая заливка фигуры
- Компиляция кода
- Заливка фигуры текстурой, созданной на основе изображения
- Компиляция кода
- Мозаичное заполнение фигуры заданным изображением
- Мозаичное заполнение изображением
- Горизонтальное зеркальное преобразование изображения при мозаичном заполнении
- Вертикальное зеркальное преобразование изображения при мозаичном заполнении
- Мозаичное заполнение с зеркальным отображением изображения по горизонтали и вертикали
- Заливка фигур с помощью градиентной кисти
- Создание линейного градиента
- Использование горизонтальных линейных градиентов
- Настройка линейных градиентов
- Создание диагональных линейных градиентов
- Создание градиента вдоль контура
- Заливка эллипса с использованием градиента контура
- Указание точек на границе
- Настройка градиента контура
- Настройка с интерполяцией
- Задание центральной точки
- Применение гамма-коррекции к градиенту
- Компиляция кода
- Загрузка и отображение метафайлов
- Компиляция кода
- Обрезка и масштабирование изображений
- Компиляция кода
- Поворот, отражение и наклон изображений
- Компиляция кода
- Использование режима интерполяции для управления качеством изображений при масштабировании
- Компиляция кода
- Создание эскизов изображений
- Компиляция кода
- Повышение производительности за счет отключения автоматического масштабирования
- Компиляция кода
- Чтение метаданных изображения
- Значение
- Пример Описание
- Компиляция кода
- Создание растрового изображения во время выполнения
- Компиляция кода
- Извлечение связанного с файлом значка в Windows Forms
- Компиляция кода
- Альфа-смешение цвета для линий и заливок
- Рисование непрозрачных и полупрозрачных линий
- Компиляция кода
- Рисование непрозрачными и полупрозрачными кистями
- Компиляция кода
- Использование режима комбинирования для управления альфа-смешением
- Компиляция кода
- Использование матрицы цветов для задания значений прозрачности в изображениях
- Компиляция кода
- Шрифты и текст
- Разработка шрифтов и их семейств
- Компиляция кода
- Рисование текста в указанной позиции
- Рисование строки текста с использованием gdi
- Компиляция кода
- Многострочный вывод текста в прямоугольнике
- Рисование текста с переносом по словам в прямоугольнике с помощью gdi
- Компиляция кода
- Рисование текста с использованием gdi
- Компиляция кода
- Выравнивание рисуемого текста
- Рисование центрированного текста с использованием gdi (DrawText)
- Компиляция кода
- Вывод текста по вертикали
- Компиляция кода
- Установка позиций табуляции для выводимого текста
- Компиляция кода
- Перебор установленных шрифтов
- Компиляция кода
- Получение метрик шрифтов
- Компиляция кода
- Сглаживание текста
- Компиляция кода
- Построение и рисование кривых
- Рисование фундаментальных сплайнов
- Рисование фундаментального сплайна в форме колокола
- Рисование замкнутого фундаментального сплайна
- Изменение изгиба фундаментального сплайна
- Компиляция кода
- Рисование отдельного сплайна Безье
- Компиляция кода
- Рисование последовательности сплайнов Безье
- Компиляция кода
- Построение и рисование контуров
- Создание изображений из прямых и кривых линий и геометрических фигур
- Компиляция кода
- Заливка открытых фигур
- Компиляция кода
- Спрямление участков кривой
- Спрямление контура
- Использование объемного преобразования
- Различные типы преобразований
- Значение порядка преобразований
- Примеры составных преобразований
- Использование графических контейнеров
- Управление состоянием объекта Graphics
- Состояние объекта Graphics
- Параметры качества
- Преобразования
- Область обрезки
- Использование вложенных графических контейнеров
- Преобразования во вложенных контейнерах
- Обрезка во вложенных контейнерах
- Параметры качества во вложенных контейнерах
- Различные уровни вложенных контейнеров
- Использование областей
- Проверка нахождения указателя мыши в заданной области
- Компиляция кода
- Обрезка изображения по границам области обрезки
- Компиляция кода
- Получение списка установленных кодировщиков
- Компиляция кода
- Получение списка установленных декодеров
- Компиляция кода
- Компиляция кода