13421

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

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

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

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

Русский

2013-05-11

110 KB

19 чел.

Лабораторная работа №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.  Отчет


 

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

44925. Философия Аристотеля, Основоположник формальной логики 40 KB
  Метафизика (гр.) –говорит о том, что выходит за пределы природы. Метафизика – учение о началах бытия и познания, об их основаниях. «Первая философия» вместо метафизика. То есть сама философия. Вторая философия – физика-производная от метафизики.
44926. My Specialty 12.04 KB
  Those who combine studies with their work re trined t the eveningtime nd the extrmurl deprtments. We ttend lectures do lbortory work nd tests. The fourthyer students combine their studies with their reserch work. We write course ppers nd grdution thesis on the scientific problems of our reserch work.
44928. Первые социологи 17.83 KB
  Знание должно быть реальным а не абстрактным; применимым очевидным организующим Энциклопедическая лестница наук: Иерархия наук в последовательности достижения ими позитивной стадии: Математика первой достигла позитивной стадии Астрономия Физика Химия Биология Социальная физика социология В социологии два раздела: Социальная Статика Социальная Динамика Социология позитивное изучение совокупности фундаментальных законов свойственных социальным явлениям Конт за модель общества применял семью и расширял ее до всего...
44930. Основные этапы складывания древнерусского государства 20.74 KB
  Основные этапы складывания древнерусского государства В своем развитии древнерусское государство прошло ряд этапов. На первом этапе образования древнерусского государства VIIIсередина IХ вв. процесс складывания государства ускоряется во многом благодаря активному вмешательству внешних сил хазар и норманнов варягов. Норманнская теория происхождения древнерусского государства.
44932. Australia. Австралия 15.29 KB
  Australia is one of the most unusual and exotic countries of the world. A significant feature of modern Australian society is the representation of a lot of cultures drawn from many lands by its people
44933. Два способа установки ПО 22.78 KB
  В первом случае пакет ПО обычно поставляется в виде trgz архива во втором случае в виде rpm пакета но это не обязательно исполняемые модули также могут распространяться в виде trgz архива. Проще всего установить ПО представленное в виде rpm пакета содержащего исполняемые файлы. Программа rpm Название этой программы или команды является аббревиатурой от Redht Pckge Mnger. Программа rpm в некотором смысле аналогична программам типа setup wizrd для MS Windows.