13421

Базовые понятия компьютерной графики. Инициализация графической среды

Лабораторная работа

Информатика, кибернетика и программирование

Лабораторная работа №1 Тема Базовые понятия компьютерной графики. Инициализация графической среды. Задание Создать программу которая выводит на экран ФИО исполнителя с помощью линий используя ручки и разные цвета. Теоретические сведения ...

Русский

2013-05-11

110 KB

18 чел.

Лабораторная работа №1

  1.  Тема

Базовые понятия компьютерной графики. Инициализация графической среды.

  1.  Задание

Создать программу, которая выводит на экран ФИО исполнителя с помощью линий, используя ручки и разные цвета.

  1.  Теоретические сведения

GDI и GDI+


Вообще говоря, одной из сильных сторон Windows — да и всех современных операционных систем — является их способность абстрагироваться от деталей, характеризующих конкретные устройства, без указаний разработчика. Например, вам не нужно понимать работу драйвера устройства жесткого диска для того, чтобы программно читать или записывать файлы на диске. Вы просто вызываете соответствующие методы в соответствующих классах .NET (или во времена, предшествующие появлению .NET, — функции Windows API).

Этот принцип также справедлив в отношении рисования. Когда компьютер рисует нечто на экране, он делает это путем отправки команд видеокарте. Однако на рынке присутствуют многие сотни разнообразных видеокарт, большинство из которых имеют отличный от других набор команд и возможностей. Если бы вам пришлось принимать это во внимание и писать специфический код для каждого видеодрайвера, то написание обычного приложения стало бы практически невозможной задачей. Вот почему, начиная с ранних версий Windows, появился интерфейс графических устройств ( graphical device interface — GDI).

GDI обеспечивает уровень абстракции, скрывая разницу между различными видео- картами. Вы просто вызываете функцию Windows API, чтобы выполнить специфическую задачу, а GDI внутри себя самостоятельно решает, как заставить определенную клиентскую видеокарту выполнить то, что необходимо при запуске определенного фрагмента кода. Мало того, если у клиента есть несколько устройств отображения, например, мониторов и принтеров, GDI обеспечивает практически одинаковый результат при выводе одного и того же изображения на экран и принтер. Если клиент желает напечатать нечто вместо отображения его на экране, ваше приложение про- сто должно сообщить системе, что устройством вывода будет принтер, после чего вызывать те же функции API точно таким же образом.

Как видим, объект контекста устройства (device context — DC; скоро мы рассмотрим его) — это очень мощный объект, и возможно, вас удивит, что под GDI все операции рисования должны выполняться через контекст устройства. DC используется даже в операциях, которые не требуют рисования на экране или любом другом аппаратном устройстве — таких как модификация графических изображений в памяти. Хотя GDI предлагает относительно высокоуровневый программный интерфейс для разработчиков, он все же базируется на старом Windows API, с функциями в сти- ле C.

GDI+ — это уровень, находящийся между GDI и приложением, которые предоставляет более интуитивно понятную, основанную на наследовании объектную модель. Хотя GDI+ — это в основном оболочка вокруг GDI, тем не менее, Microsoft посредством GDI+ предлагает ряд новых возможностей и увеличенную производительность по сравнению с некоторыми старыми средствами GDI.

Часть базовой библиотеки классов .NET, связанная с GDI+, огромна! Гораздо важнее понять фундаментальные принципы, касающиеся рисования, чтобы вы смогли получить возможность при необходимости легко расширить свои знания. Полные списки всех классов и методов, доступных в GDI+, конечно же, содержатся в документации SDK.

Разработчикам на Visual Basic 6, скорее всего, концепции рисования покажутся незнакомыми, потому что Visual Basic 6 сосредоточен на элементах управления, которые выполняют рисование самостоятельно. Разработчики на C++/MFC, однако, окажутся на более знакомой территории, поскольку MFC требует от разработчиков более подробного управления процессом рисования с применением GDI. Однако даже если вы имеете обширный опыт работы с классическим GDI, все равно в этой главе найдете для себя много нового.

Пространства имен GDI+

Обзор основных пространств имен, в которых находятся базовые классы GDI+ :

System.Drawing

Содержит большинство классов, структур, перечислений и делегатов, обеспечивающих базовую функциональность рисования.

System.Drawing.Drawing2D

Представляет основную поддержку для двумерной и векторной
графики, включая сглаживание, геометрические трансформации и графические пути.

System.Drawing.Imaging

Содержит различные классы, обеспечивающие манипуляции с графическими изображениями (битовые карты, файлы GIF и тому подобное).

System.Drawing.Printing

Содержит классы, имеющие отношение к печати и предварительному просмотру выводимых на печать изображений.

System.Drawing.Design

Включает некоторые предопределенные диалоговые окна, таблицы
свойств и другие элементы интерфейса, имеющие отношение к расширению пользовательского интерфейса времени проектирования.

System.Drawing.Text

Включает классы для выполнения более сложных манипуляций со шрифтами и семействами шрифтов.


Контексты устройств и объект Graphics

В GDI способ идентификации устройства, на которое нужно направить вывод, заключается в обращении к объекту, называемому контекстом устройства (device context— DC). DC сохраняет информацию об определенном устройстве и может транслировать вызовы функций программного интерфейса GDI в конкретные команды, направляемые устройствам. Вы также можете опросить контекст устройства на предмет того, какие возможности он предоставляет (например, может ли принтер печатать в цвете или же только в черно-белом изображении), дабы соответствующим образом откорректировать вывод. Если вы пытаетесь заставить устройство делать что-то такое, что оно не способно сделать, то DC обычно обнаруживает это и предпринимает соответствующие действия (которые, в зависимости от ситуации, могут означать генерацию исключения либо модификацию запроса таким образом, чтобы получить как можно более близкий результат в рамках возможностей данного устройства).

Однако DC не только имеет дело с аппаратным устройством. Он служит в качестве моста между приложением и Windows, и принимает во внимание любые требования и ограничения, налагаемые на рисование Windows. Например, если Windows знает, что необходимо перерисовать лишь часть окна вашего приложения, DC перехватит и отменит попытки рисования вне этой области. Благодаря связи DC с Windows, работа через контекст устройств может упростить ваш код и в других отношениях.

Например, аппаратным устройствам необходимо сообщать, где следует рисовать объекты, и обычно им нужны координаты, отсчитываемые относительно верхнего левого угла экрана (или другого выходного устройства). Однако приложения обычно отображают нечто в клиентской области (области, зарезервированной для рисования) собственного окна, возможно, используя собственную систему координат. Поскольку окно может быть позиционировано в любом месте экрана, и пользователь в любой момент может его переместить, преобразования между этими системами координат могут оказаться непростой задачей. Однако DC всегда знает, где находится ваше окно, и может выполнять такие преобразования автоматически.

В GDI+ контекст устройства помещен в оболочку базового класса .NET с именем System.Drawing.Graphics. Большая часть рисования выполняется вызовом методов экземпляра Graphics. Фактически, поскольку класс Graphics отвечает за выполнение большинства операций рисования, очень немного в GDI+ происходит такого, что не касалось бы тем или иным образом экземпляра Graphics, а потому понимание того, как управлять этим объектом, является ключом к пониманию того, как рисовать на устройствах отображения с помощью GDI+.

Класс Graphics предоставляет методы рисования на устройстве отображения. 

Перья, линии и прямоугольники в GDI+

Чтобы нарисовать линию с помощью интерфейса GDI+, нужно создать два объекта: объект Graphics и объект Pen. Объект Graphics содержит методы, непосредственно выполняющие рисование, а объект Pen служит хранилищем атрибутов, таких как цвет, ширина и стиль линии.

Рисование линии

Чтобы нарисовать линию, вызовите метод DrawLine объекта Graphics. Объект Pen передается методу DrawLine в качестве одного из аргументов. В приведенном ниже примере демонстрируется рисование отрезка, соединяющего точки с координатами (4, 2) и (12, 6).

C#

myGraphics.DrawLine(myPen, 4, 2, 12, 6);

Метод DrawLine класса Graphics перегружен, поэтому для него поддерживается несколько способов передачи аргументов. Например, можно создать два объекта Point и передать эти объекты Point методу DrawLine в качестве аргументов.

C#

Point myStartPoint = new Point(4, 2);

Point myEndPoint = new Point(12, 6);

myGraphics.DrawLine(myPen, myStartPoint, myEndPoint);

Создание объекта Pen

При создании объекта Pen можно указать несколько атрибутов. Например, один из конструкторов Pen позволяет указывать при создании объекта его цвет и ширину. В приведенном ниже примере демонстрируется рисование синего отрезка толщиной 2 из точки с координатами (0, 0) в точку с координатами (60, 30).

C#

Pen myPen = new Pen(Color.Blue, 2);

myGraphics.DrawLine(myPen, 0, 0, 60, 30);

Штриховые линии и завершения отрезков

Объект Pen также разрешает изменять значения некоторых своих свойств, таких как DashStyle, что позволяет задавать характеристики линии. В приведенном ниже примере демонстрируется рисование отрезка штриховой линии из точки с координатами (100, 50) в точку с координатами (300, 80).

C#

myPen.DashStyle = DashStyle.Dash;

myGraphics.DrawLine(myPen, 100, 50, 300, 80);

Изменяя значения свойств объекта Pen, можно задать многие атрибуты линии. Свойства StartCap и EndCap определяют вид конечных точек отрезка. Конец отрезка может быть плоским, квадратным, круглым, треугольным или иметь произвольную форму. Свойство LineJoin позволяет указывать, должны ли соединяемые линии соединяться под углом (с выступающими острыми углами), со скошенными, закругленными или обрезанными краями. На приведенном ниже примере демонстрируются различные стили завершения и соединения линий.

Рисование прямоугольника

Рисование прямоугольников в GDI+ похоже на рисование линий. Чтобы нарисовать прямоугольник, нужно создать два объекта: объект Graphics и объектPen. У объекта Graphics имеется метод DrawRectangle, а объект Pen предназначен для хранения таких атрибутов рисуемого элемента, как ширина линии и цвет. Объект Pen передается методу DrawRectangle в качестве одного из аргументов. В приведенном ниже примере демонстрируется рисование прямоугольника шириной 80 и высотой 40 точек, верхний левый угол которого расположен в точке с координатами (100, 50).

C#

myGraphics.DrawRectangle(myPen, 100, 50, 80, 40);

Метод DrawRectangle класса Graphics перегружен, поэтому для него поддерживается несколько способов передачи аргументов. Например, можно создать объект Rectangle и передать этот объект Rectangle в качестве аргумента методу DrawRectangle:

C#

Rectangle myRectangle = new Rectangle(100, 50, 80, 40);

myGraphics.DrawRectangle(myPen, myRectangle);

Объект Rectangle содержит методы и свойства, позволяющие задавать и извлекать данные о прямоугольнике. Например, методы Inflate и Offsetпозволяют изменять размер и расположение прямоугольника. Метод IntersectsWith позволяет определить, не пересекается ли данный прямоугольник с некоторым указанным прямоугольником, а метод Contains позволяет определить, находится ли указанная точка внутри данного прямоугольника.

Graphics.Clear – метод. Очищает всю поверхность рисования и выполняет заливку поверхности указанным цветом фона.

C#

public void Clear(

Color color

)

Метод Clear очищает состояние графического объекта и не должен вызываться в том случае, когда графический объект не может быть изменен.Например, если метод Clear вызывается на безопасном рабочем столе сессии терминального сервера, может возникнуть исключение ExternalException, и объект Graphics останется в некорректном состоянии.

Примеры

Следующий пример кода предназначен для использования с Windows Forms, и для него требуется объект PaintEventArgs e, являющийся параметром обработчика событий Paint. Данный код очищает поверхность рисования объекта Graphics и задает в качестве цвета фона определенный системой бирюзовый цвет.

C#

private void ClearColor(PaintEventArgs e)

{

   // Clear screen with teal background.

   e.Graphics.Clear(Color.Teal);

}

Graphics.DrawLine - метод (Pen, Point, Point)

Проводит линию, соединяющую две структуры Point.

C#

public void DrawLine(

Pen pen,

Point pt1,

Point pt2

)

Параметры

pen

Тип: System.Drawing.Pen
Структура Pen, определяющая цвет, ширину и стиль линии. 

pt1

Тип: System.Drawing.Point
Структура Point, представляющая первую точка для соединения. 

pt2

Тип: System.Drawing.Point
Структура Point, представляющая вторую точка для соединения. 

Примеры

Следующий пример кода предназначен для использования с Windows Forms, и для него требуется объект PaintEventArgs e, являющийся параметром обработчика событий Paint. Код выполняет следующие действия:

  •  Создает черное перо.
  •  Создает конечные точки линии.
  •  Рисует на экране линию.

C#

public void DrawLinePoint(PaintEventArgs e)

{

   // Create pen.

   Pen blackPen = new Pen(Color.Black, 3);

   // Create points that define line.

   Point point1 = new Point(100, 100);

   Point point2 = new Point(500, 100);

   // Draw line to screen.

   e.Graphics.DrawLine(blackPen, point1, point2);

}

Graphics.DrawLine - метод (Pen, Int32, Int32, Int32, Int32)

Проводит линию, соединяющую две точки, задаваемые парами координат.

C#

public void DrawLine(

Pen pen,

 int x1,

 int y1,

 int x2,

 int y2

)

Параметры

pen

Тип: System.Drawing.Pen
Структура Pen, определяющая цвет, ширину и стиль линии. 

x1

Тип: System.Int32
Координата X первой точки. 

y1

Тип: System.Int32
Координата Y первой точки. 

x2

Тип: System.Int32
Координата X второй точки. 

y2

Тип: System.Int32
Координата Y второй точки. 

Данный метод проводит линию на экране, соединяющую две точки, которые определяются параметрами x1, y1, x2 и y2.

Примеры

Следующий пример кода предназначен для использования с Windows Forms, и для него требуется объект PaintEventArgs e, являющийся параметром обработчика событий Paint. Код выполняет следующие действия:

  •  Создает черное перо.
  •  Создает координаты конечных точек линии.
  •  Рисует на экране линию.

C#

public void DrawLineInt(PaintEventArgs e)

{

   // Create pen.

   Pen blackPen = new Pen(Color.Black, 3);

   // Create coordinates of points that define line.

   int x1 = 100;

   int y1 = 100;

   int x2 = 500;

   int y2 = 100;

   // Draw line to screen.

   e.Graphics.DrawLine(blackPen, x1, y1, x2, y2);

}

  1.  Отчет


 

А также другие работы, которые могут Вас заинтересовать

79934. Внешнеторговая деятельность. Регулирование внешнеторговых отношений 60 KB
  Под ней понимается предпринимательская деятельность в области международного обмена товарами работами услугами информацией результатами интеллектуальной деятельности. Существенные условия контракта: наименование товара его обозначение; количество товара или порядок его определения...
79935. Договор подряда. Общие положения о подряде 239 KB
  В структуре главы Подряд выделяются общие положения бытовой подряд строительный подряд подряд на выполнение проектных и изыскательских работ подрядные работы для государственных нужд. Статья 702 ГК признает подрядом договор по которому одна сторона подрядчик обязуется выполнить по заданию другой стороны заказчика определенную работу и сдать ее результат заказчику а заказчик обязуется принять результат работы и оплатить его. Приведенное определение позволяет квалифицировать подряд как договор возмездный...
79936. Договор. Сущность договора. Заключение договоров в сети Интернет 101 KB
  Сущность договора Торговый оборот деятельность по продвижению товарной массы от изготовителей к потребителям регулируется не только законодательством но и договорами заключаемыми хозяйствующими субъектами. Законом закреплено общее правило согласно которому условия договора определяются соглашением сторон. Таким образом определение содержания договора происходит не на основе избрания сторонами приемлемых норм права а в результате самостоятельной выработки конкретных правил взаимосвязанной деятельности и придания им значения взаимных прав...
79937. Страхование. Понятие и значение страхования 312.5 KB
  Понятие и значение страхования 1. В отличие от самострахования при страховании в собственном смысле страховой фонд обслуживает не одно а целый ряд лиц и или организаций и здесь действует принцип централизации страхового фонда. Страхование в собственном смысле этого термина может осуществляться либо в форме взаимного страхования определенным образованием организованной группы лиц своими взносами образующих страховой фонд из которого они участники фонда получают возмещение возникшего вреда либо в форме так называемого коммерческого...
79938. Договоры купли-продажи, мены, дарения 222 KB
  Передача товара покупателю представляет собой исполнение заключенного и вступившего в силу договора куплипродажи со стороны продавца. Если момент вступления договора в силу совпадает с фактической передачей товара то он исполняется в момент заключения. Он является договором синаллагматическим поскольку исполнение обязательств покупателем по оплате товара обусловлено исполнением продавцом своих обязательств по передаче товара покупателю п. Иными словами покупатель не должен исполнять свои обязанности по оплате товара до исполнения...
79939. Договор аренды, лизинга, ссуды. 197.5 KB
  Понятие договора аренды Договор имущественного найма зародился в римском праве как договор найма вещей loctioconductio rerum. Дореволюционное российское гражданское законодательство использовало понятие договора имущественного найма не придавая какоголибо специального юридического значения одновременному применению понятия аренда имущества. Поэтому предметом договора аренды объявляется только плодоносящая вещь. В действующем законодательстве дается следующее легальное определение договора аренды.
79940. Транспортные договоры. Транспортное законодательство 242 KB
  Морские порты выполняют широкий круг транспортных операций: погрузку разгрузку и обслуживание заходящих в порт судов транспортноэкспедиторские и складские операции с грузами перевалку грузов между разными видами транспорта обслуживание пассажиров морских судов а также местные перевозки грузов и пассажиров на судах порта. Договор перевозки груза его особенности и виды Гражданский кодекс воспроизводит традиционное правило транспортного права согласно которому перевозка грузов осуществляется на основании договора перевозки и дает этому...
79941. Ответственность. Понятие и признаки гражданско-правовой ответственности 105 KB
  Такие меры понуждения к реальному исполнению обязательств нельзя считать ответственностью поскольку обязанность реального исполнения вытекает непосредственно из самого обязательства а ответственность должна выражаться в какомто дополнительном бремени. Долгое время в нашем законодательстве использовался принцип реального исполнения обязательств когда уплата неустойки и возмещение убытков не освобождали должника от исполнения обязательства в натуре. Если уплата неустойки и возмещение убытков вызваны ненадлежащим исполнением обязательства...
79942. Конкуренция. Понятие и социально-экономическая роль конкуренции 91.5 KB
  Одной из мер направленных на развитие конкуренции является поддержка малого и среднего предпринимательства. Дистанционное обучение для инвалидов по доступным ценам Государственная поддержка субъектов малого и среднего предпринимательства в РФ Государственная поддержка субъектов малого и среднего предпринимательства входит в деятельность органов государственной власти РФ органов государственной власти субъектов РФ органов местного самоуправления и инфраструктуры поддержки субъектов малого и среднего предпринимательства. Эти действия...