ОприложениикЛабораторнойработе № 15

Получившуюсяпрограммуи библиотеку (LWP15Draw.exe и LWP15Tools.dll), собраннуюизкусковкодаприведённыхвданнойлабораторнойработе, архив с изображениями иконок для меню (Icons.zip), использованныйвданнойработе,можнозагрузитьпо ссылке в конце этого материала (сслыка доступна в программном продукте).

Приложении № 1 (Библиотека классов LWP15Tools): Исходный код всех файлов библиотеки классов приведёнпо ссылке в конце этого материала (сслыка доступна в программном продукте).

Приложении № 2 (Файлы классов Draw...):Исходный код всех файлов классов начинающихся наслово «Draw» приведёнпо ссылке в конце этого материала (сслыка доступна в программном продукте).

Приложении № 3 (Файлы классов Graphics...):Исходный код всех файлов классов начинающихся наслово «Graphics» приведёнпо ссылке в конце этого материала (сслыка доступна в программном продукте).

Приложении № 4 (Файлы классов Command...):Исходный код всех файлов классов начинающихся наслово «Command» приведёнпо ссылке в конце этого материала (сслыка доступна в программном продукте)

Приложении № 5 (Прочие файлы):Исходный код файлов UndoManager.cs, Program.csи AssemblyInfo.cs приведёнпо ссылке в конце этого материала (сслыка доступна в программном продукте).

Приложении № 6 (Файлы классов Tool...):Исходный код всех файлов классов начинающихся наслово «Tools» приведёнпо ссылке в конце этого материала (сслыка доступна в программном продукте).

Приложение № 7 (Все формы и новые классы): Исходный код всех форм программы, пользовательского элемента DrawArea, а также новых классов DrawImageи ToolImageприведёнпо ссылке в конце этого материала (сслыка доступна в программном продукте).

Варианты заданий: Варианты для выполнения самостоятельных заданий с использованием материала данной работы приведены по ссылке в конце этого материала (сслыка доступна в программном продукте).

Лабораторная работа № 14: Простой растровый редактор

Лабораторная работа № 14: Простой растровый редактор

Содержание

Вводная часть

Создание приложения WindowsForms

20. Модификация приложения WindowsForms: подготовка интерфейса редактора

Модификация приложения WindowsForms: функциональность растрового редактора

Завершающая часть

О приложении к Лабораторной работе № 14

Вводная часть

В этой работе будет рассмотрена работа срастровой графикой и «простым» рисованием. Фактически мы будем реализовывать функциональность известного приложенияMicrosoftPaint, входящего в состав любого Windows.

Что же такое GDI+? Официальная документация скромно называет еёClass-based API, то есть основанным на классах интерфейсе прикладных программ для ОС Windowsпоколения «не GDI». Так как она встроена в Windows XP и все последующие ОС вплоть до Windows 7, её называют частью этих операционных систем. Часто встречается также определение «библиотека» или «библиотека классов». В действительности, предоставляемый GDI+ набор классов является тонкой оболочкой над множеством обычных функций, реализованных в одной динамической библиотеке GdiPlus.dll.

Итак, GDI+ — это библиотека, призванная заменить существующий уже больше 11 (или 18, в зависимости от того, как считать) лет интерфейс GDI, являющийся графическим ядром предыдущих версий Windows. Она сочетает в себе (по крайней мере, по замыслу) все достоинства своего предшественника и предоставляет множество новых мощных возможностей. Кроме того, при её проектировании заранее ставилась цель наименее болезненного переноса приложений на 64-битные платформы.

Основу для реализации функциональности растрового редактора будет составлять стандартная библиотека System.Drawing. Пространство имён System.Drawing обеспечивает доступ к функциональным возможностям графического интерфейса GDI+.Пространства имён System.Drawing.Drawing2D, System.Drawing.Imaging, и System.Drawing.Text обеспечивают дополнительные функциональные возможности.

Класс Graphics предоставляет методы рисования на устройстве отображения.Такие классы, как Rectangle и Point, инкапсулируют элементы GDI+.Класс Pen используется для рисования линий и кривых, а классы, производные от абстрактного класса Brush, используются для заливки фигур.

ОсновурисункасоставитэлементуправленияPictureBoxпространстваимёнSystem.Windows.Forms, иклассBitmap, который инкапсулирует точечный рисунок GDI+, состоящий из данных пикселей графического изображения и атрибутов рисунка.Объект Bitmap используется для работы с изображениями, определяемыми данными пикселей.

Приложение будет функционировать как растровый редактор изображений. А именно:

· будет доступна функция рисования линий и непрерывных линий с разной толщиной пера и цветом пера при рисовании;

· будет доступна функция рисования фигур, таких как прямоугольник и эллипс;

· будет доступна функция заливки фигур произвольным цветом, а также изменения толщины пера и цвета пера для контуров фигур при рисовании;

· будет доступна возможность очистки поля рисования (полная очистка и ластик), а также сохранения рисунка в разные графические форматы (например: JPEG);

· будет доступна возможность загрузки сохранённого рисунка или любого другого рисунка;

· будет доступна возможность работы с «эффектами», а именно осветление выбранного участка рисунка.

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

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

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

Обзор основных пространств имен, в которых находятся базовые классы 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+.

Наши рекомендации