на тему рефераты Информационно-образоательный портал
Рефераты, курсовые, дипломы, научные работы,
на тему рефераты
на тему рефераты
МЕНЮ|
на тему рефераты
поиск
Программирование графического режима
риватный контекст отличается от общего тем, что сохраняет изменения даже после того, как прикладная программа освободила его. Приватный контекст не хранится в кэше, поэтому прикладная программа может не освобождать его. Естественно, что в этом случае за счет использования большого объема памяти достигается более высокая скорость работы с дисплеем.

Для работы с приватным контекстом необходимо при регистрации класса окна указать стиль CS_OWNDC. После этого программа может получать хэндл контекста устройства точно так же, как и в случае общего контекста. Система удаляет приватный контекст в том случае, когда удаляется окно.

При работе с контекстами необходимо запомнить, что хэндлы контекста устройства с помощью функции BeginPaint необходимо получать только в случае обработки сообщения WM_PAINT. Во всех остальных случаях необходимо использовать функции GetDC или GetDCEx.

Контекст в памяти используется для хранения изображений, которые затем будут скопированы на устройство вывода. Сам по себе контекст в памяти не создается. Он обязательно создан как совместимый с тем устройством или окном, на которое предполагается копировать информацию (вот он - совместимый контекст - переходник между программой и драйвером устройства!). Алгоритм работы с контекстом в памяти состоит из нескольких шагов:

1. Получения хэндла контекста устройства (hDC - handle of Device Context) для окна, в которое будет осуществляться вывод изображения

2. Получения хэндла bitmap'а, который будет отображаться в окне

3. Получения совместимого с hDC контекста в памяти (для хранения изображения) с помощью функции CreateCompatibleDC

4. Выбора изображения (hBitmap) как текущего для контекста в па-мяти (hCompalibleDC)

5. Копирования изображения контекста в памяти (hCompatibleDC) на контекст устройства (hDC)

6. Удаления совместимого контекста (hCompatibleDC)

7. Принятия мер для того, чтобы замещенный bitmap из контекста в памяти не остался в памяти

8. Освобождения контекста устройства (hDC)

Как и когда удалять замещенный bitmap, зависит от программиста и поставленной перед ним задачи.

Именно этот способ и используется в большинстве программ для копирования изображения.

2. КОНСТРУКТОРСКАЯ ЧАСТЬ

2.1. Общие сведения

Программа называется EasyPaint. Программа написана на языке программирования ассемблер в среде RadAsm и скомпилирована компилятором MASM32. Кроме того, при разработке использовались следующие программы:

1. Bred

2. ICAConverter

3. Irfan View

4. Microangelo

2.2. Функциональное назначение

Программа предназначена для предоставления простой работы с изображениями в формате BMP/DIB, для чего были реализованы необходимые инструменты, а также загрузка и сохранение изображений.

2.3. Описание логической структуры

2.3.1. Алгоритм работы программы

После запуска программы создается основное окно программы, загружаются ресурсы и создаются элементы управления, а также в памяти создается совместимый контекст, на котором будет производится все рисование. После этого запускается цикл обработки сообщений, в котором происходит обработка поступающих сообщений:

1. Обработка клавиатуры

2. Обработка «горячих клавиш» главного меню

3. Обработка сообщений к диалоговому окну

4. А также всех остальных сообщений как оконной функцией, так и стандартным обработчиком

При обработке перерисовки содержимое совместимого контекста копируется на основной контекст - в окно. Все рисование осуществляется при обработке событий от мыши, а также при изменении размеров окна.

При завершении работы программы совместимый контекст удаляется из памяти.

2.3.2. Структура программы

После запуска вначале происходит инициализация общих элементов управления (Common Controls), затем вызывается процедура WinMain (procWinMain.inc), являющаяся основной частью программы, своеобразным каркасом, на который навешаны остальные функции.

В этой процедуре вначале регистрируется класс окна и создается экземпляр, причем в качестве иконки и курсора выступают загруженные ресурсы. После этого окно центрируется на экране и в него добавляются элементы управления Панель управления и Строка состояния, описанные в файлах ToolBarRealization.inc и StatusBarRealization.inc соответственно. Элементы управления создаются и настраиваются, после этого они полностью готовы к функционированию как составные части программы.

Затем в файле InitApp.inc производятся действия по инициализации программы:

· производится вызов процедуры CreateBackBuffer (DoubleBuff.inc), в которой создается совместимый контекст - для двойной буферизации вывода графики (задний буфер)

· вызов процедур SetPenParam и SetBrushColor (Draw.inc) настраивает свойства объектов карандаш и кисть совместного контекста: устанавливаются цвет и толщина

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

2.3.3. Работа с задним буфером (DoubleBuff.inc)

Процедуры этого модуля предназначены для создания плавного вывода без мерцания и любых других визуальных артефактов.

Задний буфер создается в процедуре CreateBackBuffer, которая не только создает буфер, но и кроме того позволяет менять его размер и даже копировать в новый буфер старое содержимое.

Для освобождения ресурсов буфера предназначена процедура DeleteBackBuffer.

Для очистки буфера (он заполняется белым цветом) предназначена процедура Clear.

Процедура Flip позволяет скопировать содержимое буфера на контекст окна.

Т.к. при вызове процедуры Flip отображается только заранее видимая часть изображения, то необходимо эту видимую часть вычислять. Это и делает процедура Resize.

Кроме того, в файле содержатся процедуры LoadFromFile и SaveToFile, позволяющие загружать и сохранять изображения соответственно.

2.3.4. Параметры заднего буфера (Draw.inc)

В данном файле содержатся процедуры SetPenParam, SetBrushColor и PutPixel. Две первые предоставляют удобное средство для изменения свойств карандаша и кисти заднего буфера, а процедура PutPixel предназначена для вывода точки с определенной толщиной (в зависимости от толщины она выводит или один пиксель, или окружность в заданной точке).

2.3.5. Обработка главного меню (Menu.inc)

Первой процедурой данного файла является SelectColor - процедура, реализующая работу со стандартным диалогом выбора цвета.

Следующая процедура - MenuChecked - выполняет обработку выбора инструмента. Она меняет позицию «галочки» в главном меню, а также вдавленную кнопку на панели инструментов. Также процедура меняет значение переменной OutMode, отвечающей за текущий инструмент.

Третьей и последней процедурой в файле является процедура MenuProcess, являющаяся чем-то вроде switch'а в программах на C/C++. В ней в зависимости от выбранного пункта меню выполняются определенные действия (в основном вызовы процедур).

2.3.6. Обработка мыши (Mouse.inc)

Данные модуль содержит процедуры по обработки событий от мыши, которые все связаны с рисованием. Процедуры имеют названия, схожие с названиями сообщений: MouseMove для WM_MOUSEMOVE, MouseLUp для WM_LBUTTONUP, MouseLDown для WM_LBUTTONDOWN и т.д.

2.3.7. Обработка диалогового окна (ParamDlg.inc, Приложение рис. 2)

При выборе пункта меню ФайлНовый вызывается диалоговое окно. Оно описано в ресурсах программы (Params.rc). Работа с ним осуществляется через вызов функции DlgShow (и, косвенно, через DlgWndProc), которая осуществляет всю черновую работу. Поэтому в основной программе присутствует только вызов DlgShow.

2.4. Вызов и загрузка программы

Для запуска программы необходимо запустить EasyPaint.exe.

Для выхода из программы выберите ФайлВыход либо нажмите Escape.

Программа может быть запущена с любого носителя данных, будь то: жесткий диск (HDD), дискета (FDD), CD-диск (CD- и DVD- ROM), различных внешних устройств (Flash, ZIP) и т.д.

2.5. Связь программы с другими технологиями

Данная программа написана полностью на функциях Win32 API и не использует каких-либо сторонних технологий, модулей и программ.

3. ТЕХНОЛОГИЧЕСКАЯ ЧАСТЬ

3.1. Руководство программиста

3.1.1. Назначение и условия выполнения программы

Данная курсовая работа выполнена на низкоуровневом языке Assembler. Программа предназначена для обработки изображений (BITMAP) набором инструментов, стандартного для программ данного класса (графические редакторы). Важно помнить, что программа сохраняет изображения с форматом пиксела рабочего стола, а загружает с любым корректным форматом.

3.1.2. Системные требования

· Операционная система семейства Win32

· Процессор и оперативная память, достаточные для выполнения первого пункта

· Мышь (не менее 1 кнопки), желательно колесико (или аналог)

· Клавиатура

· 16 Кб свободного места на носителе

· Монитор, поддерживающий режим не менее 800x600x8

3.1.3. Тестирование программы

Для тестирования данной программы следует произвести следующие действия:

Запустить программу EasyPaint.exe. В главном окне программы у кнопок панели инструментов должны быть изображения, как на рис. 1 из приложения. А также, курсор должен принимать над клиентской областью окна форму перекрестья. Если что-то не так, это значит, что были изменены ресурсы программы и корректная работа программы не гарантируется.

Загрузить какое-либо изображение или работать с исходным пустым. Используя инструменты в любой последовательности и с любыми настройками, получить изображение, которое отвечает логике произведенных действий.

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

Создать новое изображение, обратив внимание на соответствие указанных параметров и результата. Сделать это с сохранением предыдущего изображения и без него.

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

2.1.1. Входные и выходные данные

Данная программа - это программа управляемая данными, т.к. вся работа основана на обработке событий (действий пользователя и системы). Это, а также загружаемые изображения - входные данные

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

3.2. Руководство оператора

2.2.1. Назначение программы

Данная курсовая работа предназначена для предоставления простого способа работы с BMP-файлами. Позволяет загружать, сохранять а также редактировать изображения с помощью следующих инструментов:

· Карандаш

· Линия

· Прямоугольник

· Эллипс

· Стирка

· Заливка

· Пипетка

2.2.2. Выполнение программы

После запуска программы появляется главное окно (Приложение рис.1), в котором происходит основная работа. Все операции реализованы в меню, также часть из них доступна через «горячие клавиши», приведенные в меню. Большинство операций доступны через панель инструментов.

Свойства карандаша и кисти выводятся в строке состояния:

· Цвет карандаша

· Цвет кисти

· Толщина карандаша в пикселях

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

ЛИТЕРАТУРА

1.
Румянцев П.В. Азбука программирования в Win32 API. - 3-е издание., дополн. - М.: Горячая линия-Телеком, 2001. - 312 с.: ил.

2. MASM32 Library Reference

3. Microsoft Win32 Programmer's Reference

4. www.wasm.ru Уроки Iczelion'а по Win32 API в переводе Aquila

ПРИЛОЖЕНИЕ

Рисунок 1. Основное окно программы

Рисунок 2. Окно параметров нового изображения

Страницы: 1, 2



© 2003-2013
Рефераты бесплатно, курсовые, рефераты биология, большая бибилиотека рефератов, дипломы, научные работы, рефераты право, рефераты, рефераты скачать, рефераты литература, курсовые работы, реферат, доклады, рефераты медицина, рефераты на тему, сочинения, реферат бесплатно, рефераты авиация, рефераты психология, рефераты математика, рефераты кулинария, рефераты логистика, рефераты анатомия, рефераты маркетинг, рефераты релиния, рефераты социология, рефераты менеджемент.