ОприложениикЛабораторнойработе № 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+.