GDI + это способ рисовать фигуры, шрифты, изображения или вообще что-нибудь графическое в Visual Basic .СЕТЬ.
Эта статья является первой частью полного введения в использование GDI + в Visual Basic .NET.
GDI + - это необычная часть .NET. Это было здесь до .NET (GDI + был выпущен с Windows XP), и он не использует те же циклы обновления, что и .NET Framework. В документации Microsoft обычно говорится, что Microsoft Windows GDI + является API для C / C ++ программисты в ОС Windows. Но GDI + также включает в себя пространства имен, используемые в VB.NET для программного графического программирования.
WPF
Но это не только графическое программное обеспечение, предоставленное Microsoft, особенно начиная с Framework 3.0. Когда были представлены Vista и 3.0, был представлен совершенно новый WPF. WPF - это высокоуровневый аппаратно-ускоренный подход к графике. Как говорит Тим Кэхилл, член команды разработчиков программного обеспечения Microsoft WPF, вместе с WPF «вы описываете свою сцену с помощью высокоуровневых конструкций, и мы будем беспокоиться о отдых. "И тот факт, что это аппаратное ускорение означает, что вам не нужно перетаскивать операции вашего компьютера процесс рисования фигур на экран. Большая часть реальной работы выполняется вашей видеокартой.
Мы были здесь раньше, однако. Каждый «большой скачок вперед» обычно сопровождается несколькими спотыканиями назад, и, кроме того, WPF потребуются годы, чтобы пройти через миллионы байтов кода GDI +. Это особенно верно, поскольку WPF предполагает, что вы работаете с высокопроизводительной системой с большим объемом памяти и горячей графической картой. Вот почему многие компьютеры не могли работать с Vista (или, по крайней мере, использовать графику Vista Aero), когда она была впервые представлена. Так что эта серия по-прежнему доступна на сайте для всех и каждого, кому она по-прежнему нужна.
Хороший старый код
GDI + - это не то, что вы можете перетащить на форму, как другие компоненты в VB.NET. Вместо этого объекты GDI + обычно должны добавляться старым способом - путем их кодирования с нуля! (Хотя в VB .NET есть несколько очень полезных фрагментов кода, которые действительно могут вам помочь.)
Чтобы кодировать GDI +, вы используете объекты и их члены из ряда пространств имен .NET. (В настоящее время это на самом деле просто код-обертка для объектов ОС Windows, которые фактически выполняют эту работу.)
Пространства имен
Пространства имен в GDI +:
Система. Рисование
Это ядро GDI + пространство имен. Он определяет объекты для базового рендеринга (шрифты, ручки, базовые кисти и т. д.) и самый важный объект: графика. Мы увидим больше всего в нескольких параграфах.
Система. Рисунок. Drawing2D
Это дает вам объекты для более продвинутой двухмерной векторной графики. Некоторые из них - это градиентные кисти, колпачки и геометрические преобразования.
Система. Рисунок. обработки изображений
Если вы хотите изменить графические изображения - то есть изменить палитру, извлечь метаданные изображения, манипулировать метафайлами и т. Д. - это то, что вам нужно.
Система. Рисунок. печать
Чтобы отобразить изображения на распечатанной странице, взаимодействовать с самим принтером и отформатировать общий вид задания на печать, используйте здесь объекты.
Система. Рисунок. Текст
Вы можете использовать коллекции шрифтов с этим пространством имен.
Графический объект
С чего начать с GDI +? Графика объект. Хотя вещи, которые вы рисуете, отображаются на вашем мониторе или принтере, объект Graphics - это «холст», на котором вы рисуете.
Но объект Graphics также является одним из первых источников путаницы при использовании GDI +. Графический объект всегда связан с определенным контекст устройства. Итак, первая проблема, с которой сталкивается практически каждый новый ученик GDI +: «Как получить графический объект?»
Есть два основных способа:
- Вы можете использовать е параметр события, который передается в OnPaint событие с PaintEventArgs объект. Несколько событий проходят PaintEventArgs и вы можете использовать для ссылки на объект Graphics, который уже используется контекстом устройства.
- Вы можете использовать CreateGraphics метод для контекста устройства для создания объекта Graphics.
Вот пример первого метода:
Защищенные переопределения Sub OnPaint (_. ByVal e As System. Окна. Формы. PaintEventArgs) Dim g As Graphics = e. Графика. грамм. DrawString ("О Visual Basic" & vbCrLf _. & "и GDI +" & vbCrLf & "Отличная команда", _. Новый шрифт («Times New Roman», 20), _. Кисти. Firebrick, 0, 0) MyBase. OnPaint (e) End Sub
Нажмите здесь, чтобы отобразить иллюстрацию
Добавьте это в класс Form1 для стандартного приложения Windows, чтобы кодировать его самостоятельно.
В этом примере объект Graphics уже создан для формы Form1. Все, что должен сделать ваш код, - это создать локальный экземпляр этого объекта и использовать его для рисования в той же форме. Обратите внимание, что ваш код Переопределение OnPaint метод. Поэтому MyBase. OnPaint (e) выполняется в конце. Вы должны убедиться, что если базовый объект (тот, который вы переопределяете) делает что-то еще, у него есть шанс сделать это. Часто ваш код работает без этого, но это хорошая идея.
PaintEventArgs
Вы также можете получить графический объект, используя PaintEventArgs объект передан вашему коду в OnPaint и Методы OnPaintBackground формы. PrintPageEventArgs прошло в PrintPage Событие будет содержать графический объект для печати. Можно даже получить графический объект для некоторых изображений. Это позволяет рисовать прямо на изображении так же, как на форме или компоненте.
Обработчик события
Другой вариант первого метода - добавить обработчик события для Покрасить событие для формы. Вот как выглядит этот код:
Частный Sub Form1_Paint (_. ByVal sender As Object, _. ByVal e As System. Окна. Формы. PaintEventArgs) _. Обращается со мной. Покрасить. Dim g As Graphics = e. Графика. грамм. DrawString ("О Visual Basic" & vbCrLf _. & "и GDI +" & vbCrLf & "Отличная команда", _. Новый шрифт («Times New Roman», 20), _. Кисти. Огнеупорный кирпич, 0, 0) End Sub
CreateGraphics
Второй метод для получения объекта Graphics для вашего кода использует CreateGraphics метод, который доступен со многими компонентами. Код выглядит так:
Частный Sub Button1_Click (_. ByVal отправитель как система. Объект, _. ByVal e As System. EventArgs) _. Ручки Button1.Click. Дим г = я. CreateGraphics. грамм. DrawString ("О Visual Basic" & vbCrLf _. & "и GDI +" & vbCrLf & "Отличная команда", _. Новый шрифт («Times New Roman», 20), _. Кисти. Огнеупорный кирпич, 0, 0) End Sub
Здесь есть пара отличий. Это в Button1.Click событие, потому что, когда Form1 перекрашивается в нагрузка Событие, наша графика потеряна. Поэтому мы должны добавить их в более позднее событие. Если вы кодируете это, вы заметите, что графика теряется, когда Form1 должен быть перерисован. (Сверните и разверните снова, чтобы увидеть это.) Это большое преимущество использования первого метода.
Большинство ссылок рекомендует использовать первый метод, поскольку ваша графика будет перекрашена автоматически. GDI + может быть хитрым!