Скачать 164.88 Kb.
|
Урок 2. Графические методыГарнаев А. Visual Basic .NET. Разработка приложений. Глава 12. Общие сведения о векторной графикеРисование линий, прямоугольников и других фигур с использованием интерфейса GDI+ происходит в некоторой системе координат. Пользователь может выбрать одну из многих реализованных систем координат, но по умолчанию используется плоская декартова система координат, начало координат которой расположено в верхнем левом углу экрана, ось X направлена вправо, а ось Y — вниз. Единицей измерения в заданной по умолчанию системе координат является пиксель (минимальный элемент изображения). Изображение на мониторе компьютера формируется как прямоугольный массив точек (пикселей), являющихся минимальными элементами изображения. Количество пикселей, отображаемых на экране, зависит от типа монитора. Количество пикселей, отображаемых на экране конкретного монитора, может быть изменено пользователем в определенных пределах. При использовании интерфейса GDI+ для рисования линии, прямоугольника или формы необходимо указывать определенные ключевые данные, задающие параметры рисуемого элемент. Например, отрезок задается координатами двух точек, а прямоугольник — точкой, шириной и высотой. Интерфейс GDI+ взаимодействует с программным обеспечением драйвера экрана, чтобы определить, какие пиксели экрана должны быть высвечены, чтобы на экране возникло изображение линии, прямоугольника или кривой. На приведенном ниже рисунке показаны пиксели, высвечиваемые, чтобы отобразить отрезок прямой линии от точки с координатами (4, 2) до точки с координатами (12, 8). За время развития компьютерной графики были выделены геометрические фигуры, наиболее полезные при создании двухмерных изображений. Все эти элементы поддерживаются интерфейсом GDI+, ниже приведен их полный список:
Графические методыГрафические методы – это функции, которые содержатся в языке VB и вызываются во время выполнения программы. С помощью графических методов можно рисовать на форме, на кнопке, на текстовом поле, на графическом поле PictureBox или на других элементах управления. Для обеспечения рисования в VB имеется специальный класс Graphics, расположенный в пространстве имен System.Drawing. Его код и содержит программы для рисования фигур и для другой работы с графической информацией. В Обозревателе объектов (F2) можно просмотреть свойства и методы класса Graphics. Среди них много методов рисования фигур (например, все те, что начинаются на Draw и Fill). http://msdn.microsoft.com/ru-ru/library/system.drawing.graphics.aspx Перед тем как рисовать линии и фигуры, отображать текст, выводить изображения и управлять ими необходимо создать объект Graphics. Объект – это «копия», экземпляр класса, обладающий всеми нужными его возможностями. Объект Graphics представляет поверхность рисования GDI+ и используется для создания графических изображений. Класс Graphics предоставляет методы для вывода объектов в устройстве отображения. Объект Graphics связан с конкретным контекстом устройства. Ниже представлены два этапа работы с графикой.
Создание объекта Graphicshttp://msdn.microsoft.com/ru-ru/library/5y289054.aspx Существуют различные способы создания графических объектов. Один из них: Вызвать метод CreateGraphics элемента управления или формы, чтобы получить ссылку на объект Graphics, соответствующий поверхности рисования этой формы или элемента управления. Этот подход используется, если необходимо рисовать на поверхности уже существующей формы или элемента управления. Существует еще такое требование: форме и каждому элементу управления – свой объект класса Graphics. Например, для рисования на форме, двух метках и на графическом поле PictureBox необходимо создать 4 объекта класса Graphics: Dim g As Graphics = Me.CreateGraphics Dim g1 As Graphics = Label1.CreateGraphics Dim g2 As Graphics = Label2.CreateGraphics Dim g3 As Graphics = PictureBox1.CreateGraphics Можно также создать объект Graphics из изображения, используя метод FromImage. Dim myBitmap as New Bitmap("myPict.bmp") Dim g as Graphics = Graphics.FromImage(myBitmap) Некоторые методы класса Graphics
Используя объект Graphics, можно нарисовать много разных фигур и линий. К этим методам относятся
Рисунки и значки можно также рисовать с помощью методов:
Методы прорисовки залитых объектов:
Кроме того, можно манипулировать системой координат, используемой объектом Graphics. Для любого объекта, потребляющего системные ресурсы (например, для объектов Pen и Graphics), всегда нужно вызывать метод Dispose. Основные объекты, используемые с объектом Graphics.Класс Penhttp://msdn.microsoft.com/ru-ru/library/system.drawing.pen.aspx http://msdn.microsoft.com/ru-ru/library/8z5dw491.aspx Служит для рисования линий, контуров и отрисовки других геометрических объектов. При создании объекта Pen можно указать несколько атрибутов. Например, один из конструкторов Pen позволяет указывать при создании объекта его цвет и ширину. Объект Pen рисует линию заданной ширины и указанного стиля. Объект Pen также разрешает изменять значения некоторых своих свойств, таких как DashStyle, которое используется для рисования разнообразных штрих-пунктирных линий. Нарисованную при помощи объекта Pen линию можно заполнить, используя различные стили заливки, включая сплошные цвета и текстуры. Стиль заливки зависит от кисти или текстуры, выбранной в качестве объекта заполнения. Изменяя значения свойств объекта Pen, можно задать многие атрибуты линии. Свойства StartCap и EndCap определяют вид конечных точек отрезка. Конец отрезка может быть плоским, квадратным, круглым, треугольным или иметь произвольную форму. Свойство LineJoin позволяет указывать, должны ли соединяемые линии соединяться под углом (с выступающими острыми углами), со скошенными, закругленными или обрезанными краями. На приведенном ниже примере демонстрируются различные стили завершения и соединения линий. Dim p As New Pen(Color.Blue, 2) p.DashStyle = Drawing2D.DashStyle.Dash p.EndCap = Drawing2D.LineCap.Round p.StartCap = Drawing2D.LineCap.ArrowAnchor Класс Brushhttp://msdn.microsoft.com/ru-ru/library/system.drawing.brush.aspx http://msdn.microsoft.com/ru-ru/library/cwka53ef.aspx Служит для заливки областей, например фигур, изображений или текста. Замкнутые фигуры, такие как прямоугольники или эллипсы, состоят из двух частей — из контура и из внутренней области. Контур рисуется с помощью пера, а внутренняя область заливается с помощью кисти. В GDI+ имеется несколько классов кистей для заливки замкнутых фигур: SolidBrush, HatchBrush, TextureBrush, LinearGradientBrush и PathGradientBrush. Все эти классы являются производными от класса Brush. На приведенном ниже рисунке изображен прямоугольник, залитый сплошной кистью, и эллипс, залитый штриховой кистью. Dim b As New SolidBrush(Color.Blue) или Dim b = Brushes.Aqua При заливке формы штриховой кистью необходимо задать основной цвет, цвет фона и стиль штриховки. Основной цвет определяет цвет штриховки. В GDI+ имеется более 50 стилей штриховки; на следующем рисунке показаны стили Horizontal, ForwardDiagonal и Cross. Текстурная кисть позволяет заливать фигуру с использованием узора, сохраненного в виде растрового изображения. В GDI+ имеется два типа градиентных кистей: кисти линейного градиента и кисти градиента контура. Кисти линейного градиента можно использовать для заливки фигуры цветом, постепенно меняющимся от одного края фигуры до другого по горизонтали, по вертикали или по диагонали. Класс FontСодержит описание фигур, которые должны использоваться при отрисовке текста. Определяет конкретный формат текста, включая начертание шрифта, его размер и атрибуты стиля. http://msdn.microsoft.com/ru-ru/library/system.drawing.font.aspx Dim f As New Font("Arial", 10, FontStyle.Italic) Структура ColorСодержит различные цвета. Представляет цвета в терминах каналов альфа, красного, зеленого и синего (ARGB). http://msdn.microsoft.com/ru-ru/library/system.drawing.color.aspx Именованные цвета представляются с помощью свойств структуры Color. Цвета по имени библиотеки MSDN: http://msdn.microsoft.com/en-us/library/aa358802.aspx. Цвет каждого пикселя представляется 32-битным числом: по 8 бит для интенсивности альфа-канала, красного, зеленого и синего (ARGB). Каждый из четырех указанных компонентов представляет собой число от 0 до 255, где 0 соответствует нулевой интенсивности, а 255 — наибольшей интенсивности. Альфа-компонент определяет прозрачность цвета: 0 соответствует полной прозрачности, а 255 — полной непрозрачности. Чтобы определить альфа-, красный, зеленый или синий компоненты цвета, можно использовать свойство A, R, G или B, соответственно. Пользовательский цвет можно создать с помощью одного из методов FromArgb. Если этот метод используется с тремя параметрами, то это красный, зеленый или синий компоненты цвета. Например:
Чем меньше каждой краски мы положим, тем темнее будет цвет, чем больше – тем светлее. Функция FromArgb позволяет управлять прозрачностью цвета. Для этого используется ее вариант не с тремя, а с четырьмя параметрами. Второй, третий и четвертый параметры имеют привычный нам смысл количества красной, зеленой и синей краски. А вот первый параметр определяет прозрачность цвета. Если он равен 255, то цвет полностью непрозрачен, а если 0 – то полностью прозрачен (невидим). Также возможно использовать функцию FromArgb с двумя параметрами: первый определяет прозрачность цвета, а второй – сам цвет по имени. Dim c1, c2, c3 As Color 'Непрозрачный случайный цвет c1 = Color.FromArgb(Int(Rnd() * 256), Int(Rnd() * 256), Int(Rnd() * 256)) 'Полупрозрачный синий цвет c2 = Color.FromArgb(127, 0, 0, 255) 'Полупрозрачный зеленый цвет c3 = Color.FromArgb(127, Color.Green) Для определения цвета рисования можно также использовать системные цвета. Это те цвета, на которые настроены элементы Windows: окна, их заголовки, цвет текста в заголовках, меню и т.д. Несистемные цвета VB предоставлял в структуре Color и в классах Pens и Brushes пространства имен System.Drawing. Системные же цвета находятся соответственно в классах SystemColors, SystemPens и SystemBrushes пространства имен System.Drawing. Если вы не используете в своем проекте системных цветов, цвета вашего приложения на любом компьютере будут одинаковы независимо от настроек Windows. Опасайтесь делать цвета одних элементов проекта системными, а других – несистемными. Рисование фигур и изображений и управление имиПосле создания объекта Graphics его можно использовать для рисования линий и фигур, отображения текста или изображения и управления ими. Очистка изображенияПрежде чем создавать новое изображение, часто бывает необходимо вытереть старое. Для этого используется метод Clear. Очищает всю поверхность рисования и выполняет заливку поверхности указанным цветом фона. Синтаксис метода: object.Clear (Color.Цвет) Отрезки прямыхhttp://msdn.microsoft.com/ru-ru/library/system.drawing.graphics.drawline.aspx Рисуются методом DrawLine. Отрезок прямой можно построить, если известно положение двух его крайних точек. Они задаются в обращении к методу. Первая пара параметров вслед за указанием пера – координаты одной точки (любой из двух), вторая пара – другой. Первое число в каждой паре - горизонтальная координата, второе число – вертикальная. Синтаксис метода: object.DrawLine (Pens.Цвет, x1, y1, x2, y2) Пример прорисовки зеленой линии из левого верхнего угла формы в правый нижний: Dim g As Graphics = Me.CreateGraphics Dim GreenPen As New Pen(Color.Green, 3) Dim x1 As Integer = 0 Dim y1 As Integer = 0 Dim x2 As Integer = Me.ClientSize.Width Dim y2 As Integer = Me.ClientSize.Height g.DrawLine(GreenPen, x1, y1, x2, y2) Прямоугольники и квадратыhttp://msdn.microsoft.com/ru-ru/library/system.drawing.graphics.drawrectangle.aspx http://msdn.microsoft.com/ru-ru/library/system.drawing.graphics.fillrectangle.aspx Рисуются методами DrawRectangle (контур) и FillRectangle (заливка). Прямоугольник можно построить, если известно положение его верхнего левого угла, ширина и высота. Четыре параметра в скобках вслед за указанием пера (или кисти) и определяют эти величины. Синтаксис метода: object.FillRectangle (Brushes.Цвет, x, y, width, height) object.DrawRectangle (Pens.Цвет, x, y, width, height) Пример прорисовки голубого квадрата с синим контуром в центре формы: Dim g As Graphics = Me.CreateGraphics Dim p As New Pen(Color.Blue, 3) Dim b As New SolidBrush(Color.SkyBlue) Dim x As Integer = Me.ClientSize.Width \ 2 Dim y As Integer = Me.ClientSize.Height \ 2 Dim w As Integer = 100 Dim h As Integer = 100 g.FillRectangle(b, x - w \ 2, y - h \ 2, w, h) g.DrawRectangle(p, x - w \ 2, y - h \ 2, w, h) Объект Rectangle содержит методы и свойства, позволяющие задавать и извлекать данные о прямоугольнике. Например, методы Inflate и Offset позволяют изменять размер и расположение прямоугольника. Метод IntersectsWith позволяет определить, не пересекается ли данный прямоугольник с некоторым указанным прямоугольником, а метод Contains позволяет определить, находится ли указанная точка внутри данного прямоугольника. Эллипсы и кругиРисуются методами DrawEllipse (контур) и FillEllipse (заливка). Они рисует эллипс, определенный ограничивающим прямоугольником, заданным с помощью пары координат, ширины и высоты. Синтаксис метода: object.FillEllipse (Brushes.Цвет, x, y, width, height) object.DrawEllipse (Pens.Цвет, x, y, width, height) Пример прорисовки голубого круга с синим контуром, касающегося либо верхнего и нижнего краев формы, либо правого и левого: Dim w, h, d, x, y As Integer Dim g As Graphics = Me.CreateGraphics w = Me.ClientSize.Width h = Me.ClientSize.Height d = Math.Min(w, h) x = w \ 2 y = h \ 2 g.FillEllipse(Brushes.Aqua, x - d \ 2, y - d \ 2, d, d) g.DrawEllipse(Pens.Blue, x - d \ 2, y - d \ 2, d, d) Дуги и сектораhttp://msdn.microsoft.com/ru-ru/library/hk087c6d.aspx http://msdn.microsoft.com/ru-ru/library/system.drawing.graphics.drawarc.aspx Дуги рисуются методом DrawArc. Дуга — это часть эллипса. Поэтому первые пять параметров метода имеют тот же смысл, что и первые пять параметров метода DrawEllipse. Добавляются еще два параметра, задающие в градусах размер и положение дуги на эллипсе (или окружности). На рисунке поясняется смысл этих параметров. Углы измеряются по часовой стрелке, начиная от оси X. Первый из двух параметров указывает начало дуги (30), второй – длину дуги (60). Синтаксис метода: object.DrawArc (Pens.Цвет, x, y, width, height, startAngle, sweepAngle) Если значение параметра sweepAngle больше 360 или меньше -360 градусов, он интерпретируется, соответственно, как 360 или -360 градусов. http://msdn.microsoft.com/ru-ru/library/system.drawing.graphics.drawpie.aspx Секторы рисуются методом DrawPie. Этот метод рисует сектор, определяемый дугой эллипса и двумя радиальными линиями, которые пересекаются с конечными точками дуги. Все параметры имеют тот же смысл, что и в DrawArc. Синтаксис метода: object.DrawPie (Pens.Цвет, x, y, width, height, startAngle, sweepAngle) http://msdn.microsoft.com/ru-ru/library/vstudio/hhfwf6kx%28v=vs.90%29.aspx Закрашенные секторы рисуются методом FillPie. Этот метод заполняет внутреннюю часть сектора, определяемого дугой эллипса и двумя радиальными линиями, которые пересекаются с конечными точками дуги. Отличается он от DrawPie только наличием кисти вместо пера. Синтаксис метода: object.FillPie (Brushes.Цвет, x, y, width, height, startAngle, sweepAngle) МногоугольникиЧтобы нарисовать многоугольник, используется метод DrawPolygon. Рисует многоугольник, определяемый массивом точек (структур Point). Массив объектов Point содержит точки, которые должны быть соединены отрезками прямых. Каждая пара двух следующих друг за другом точек массива определяет сторону многоугольника. Кроме того, если последняя и первая точки массива не совпадают, то они определяют последнюю сторону многоугольника. Синтаксис метода: object.DrawPolygon (Pens.Цвет, Points()) В приведенном ниже примере демонстрируется рисование многоугольника с тремя сторонами. Метод DrawPolygon автоматически замыкает многоугольник, соединяя точки (30, 60) и (0, 0) прямой линией. Dim PArr As Point() = {New Point(0, 0), New Point(50, 30), New Point(30,60)} g.DrawPolygon(myPen, PArr) На приведенном ниже рисунке изображен полученный многоугольник. Текстовые надписиhttp://msdn.microsoft.com/ru-ru/library/system.drawing.graphics.drawstring.aspx http://msdn.microsoft.com/ru-ru/library/a3a2bads%28v=vs.100%29.aspx Указываемую текстовую строку в заданном месте создает метод DrawString. Класс Graphics содержит несколько методов DrawString, позволяющих указывать различные свойства текста, такие как расположение, ограничивающий прямоугольник, шрифт и формат. Если необходимо нарисовать текст в виде одной горизонтальной строки, которая начинается в указанной точке, тогда используем следующие параметры метода DrawString: Синтаксис метода: object.DrawString (s, font, brush, x, y) s – строка для рисования. font – объект Font, определяющий формат текстовой строки. brush – объект Brush, определяющий цвет и текстуру создаваемого текста. x – координата X верхнего левого угла отображаемого текста. y – координата Y верхнего левого угла отображаемого текста. Чтобы нарисовать текст с переносом по строкам внутри прямоугольника, можно воспользоваться методом DrawString, который принимает параметр Rectangle. Синтаксис метода: object.DrawString (s, font, brush, layoutRectangle) layoutRectangle – структура Rectangle, которая задает место расположения создаваемого текста. Текст, представляемый параметром s, отображается внутри прямоугольника, определяемого параметром layoutRectangle. Если текст не помещается в прямоугольнике, он обрезается до ближайшего слова. КоординатыКоординаты в методах могут быть и отрицательными. В результате вся фигура или ее часть оказывается левей или выше формы и поэтому не видна. Координаты в методах могут быть и слишком большими положительными. В результате вся фигура или ее часть оказывается правей или ниже формы и поэтому не видна. Освобождение ресурсов системы, используемых объектомПосле завершения использования объектов, которые потребляют ресурсы системы, например объектов Graphics или Pen, необходимо вызвать для этих объектов метод Dispose. Каждый созданный объект, даже если он невидим, расходует ресурсы компьютера. Хорошим тоном у программистов является заботиться о компьютере и не перенапрягать его. Поэтому, когда ясно, что объект отработал свое и больше не понадобится, метод Dispose освобождает все ресурсы, используемые данным объектом Graphics. g.Dispose() drawFont.Dispose() drawBrush.Dispose() drawPen.Dispose() ЗадачиЗадача 1. В контейнере PictureBox нарисовать N наклонных линий таким образом, что самая большая из линий является побочной диагональю контейнера, а остальные линии находятся выше нее на одинаковом расстоянии друг от друга и распределены по контейнеру. Например, N = 4: Задача 2. В контейнере PictureBox нарисовать 2*N-1 кругов одинакового диаметра, расположенных вдоль горизонтальной прямой. Крайние круги касаются левой и правой границ контейнера. Каждая следующая окружность проходит через центр предыдущего круга. Все окружности имеют одинаковый случайный цвет, а круги чередуются: полупрозрачные синий и зеленый. Например, N = 5: Задача 3. Создать процедуру, которая рисует кораблик относительно некоторой точки (X,Y). Используя эту процедуру, нарисовать 10 корабликов случайных цветов в случайных местах контейнера PictureBox. Здесь pct – это контейнер PictureBox. |
Basic ... | Урок-лекция (2ч) Тема: Среда программирования Visual Basic. Окна,... Цель: знакомство учащихся с основными терминами и элементами ооп, со средой программирования Visual Basic на примерах решения конкретных... | ||
Visual Basic крепкий орешек! Итак, вы решили изучить язык программирования высокого уровня Visual Basic. Я попытаюсь помочь вам в этом. Наберитесь немного терпения,... | Программа по формированию навыков безопасного поведения на дорогах... Методическое пособие предназначено для учителей, которые планируют проводить занятия по курсу «Основы программирования на приме-ре... | ||
Разработка урока по информатике с применением икт на тему «Программирование... ... | Программа по формированию навыков безопасного поведения на дорогах... Бейсик (Basic) диалоговый учебный язык программирования для персональных компьютеров. На современных компьютерах используется следующие... | ||
Урок n 29 Основы программирования в среде Visual Basic 0 | Тематическое планирование Комментарий: Компьютерный практикум проводится... Компьютерный практикум проводится в системе программирования Visual Basic 0 (SP2) cce, которая входит в состав cd-диска умк н. Д.... | ||
Урок №8 Тема урока: Инкапсуляция и свойства объекта в ооп Рассмотреть примеры использования инкапсуляции и свойств объекта в ооп объектов в Visual Basic | Для просмотра щелкнуть по ссылке с нажатой клавишей ctrl Класс: 7-8... Цели : Сформировать умение разработки проекта в среде Visual Basic по алгоритму (карте задания) | ||
Урока № урока по теме Основы графики. Графические редакторы Урок №3 Знакомство с Paint. Net Использование икт позволяет обеспечить максимальную наглядность на уроке, разнообразить деятельность учащихся | Анализ посещенного урока Наименование прорабатываемой на занятиях темы знакомство с объектно-ориентированным языком программирования Visual Basic. Лабораторная... | ||
Проекта: Разработка Web-приложений Разработка web-приложений, бизнес процесс разработки web-приложения, cms drupal, создание сайта кафедры | Интегрированная среда разработки языка Visual Basic ... | ||
Рефератов (ргр) по дисциплине «Разработка приложений в среде Oracle» Разработка Delphi-приложений для Oracle. Визуальные компоненты для работы с набором данных | Программа по формированию навыков безопасного поведения на дорогах... Оборудование: компьютер, среда Visual Basic, мультимедийный проектор, экран, раздаточный материал |