2.4 Преобразования графических файлов
Рассмотрим два вида преобразований:
- точечные - новое значение элемента изображения (пиксела) рассчитывается только на основе его старого значения;
- пространственные (матричные) - при расчете нового значения пиксела учитывается не только его старое значение, но также значения некоторой области пикселов вокруг него.
Точечные преобразования удобно выполнять с помощью таблиц преобразования. Таблица преобразования - это просто массив, заполненный какими-то значениями. Размер массива равен максимальному значению, которое может принимать преобразуемая величина. С помощью такой таблицы удобно и быстро заменять одно значение другим. Таблицы преобразований применимы, когда новое значение формируется из единственного старого значения, т. е. при точечном преобразовании.
Рассмотрим, например, как можно инвертировать цвет картинки. Диапазон значений каждого 8-битного компонента цвета находится в пределах от 0 до 255. Создадим таблицу преобразования из 256 элементов и заполним ее значениями от 255 до 0 (рис. 2.4.1).
индекс | 0 | 1 | 2 | 3 | … | 253 | 254 | 255 |
значение | 255 | 254 | 253 | 252 | … | 2 | 1 | 0 |
Рисунок 2.4.1 - Таблица преобразования "инверсия"
После преобразования по формуле (V’= 255 - V) с использованием таблицы интенсивность 255 будет заменена на 0, 254 - на 1 и т. д. В случае такого простого преобразования, как инверсия цвета, использование таблицы может и не дать особого выигрыша по скорости, но если новое значение пиксела должно рассчитываться по более сложной формуле, чем в нашем случае, то выигрыш будет весьма заметен. Кроме того, использование таблиц позволяет использовать единообразный подход к осуществлению различных преобразований.
Пространственное преобразование заключается в нахождении свертки значений группы пикселов. Свертка вычисляется как сумма пиксельных значений, попавших в зону преобразования, помноженных на весовые коэффициенты. В качестве весовых коэффициентов выступают элементы матрицы преобразования. Значения элементов матрицы преобразования и определяют тип преобразования. Размер матрицы преобразования соответствует области пикселов, которые будут участвовать в преобразовании. Центральный элемент матрицы - весовой коэффициент преобразуемого пиксела (х, у). Поэтому матрицы преобразования, обычно имеют нечетный размер (например, 3x3 или 5x5 элементов). Например, свертка с помощью единичной матрицы соответствует преобразованию "размытие" (понижение четкости) изображения. Достигается такой эффект за счет усреднения значений группы пикселов, охваченной матрицей преобразования. Если значение пиксела (х, у) было выше среднего, оно уменьшится, если было ниже среднего, то увеличится. Однако это не означает, что все изображение станет монотонным, так как матрица преобразования движется по изображению вместе с координатами (х, у), средний уровень тоже изменяется.
3. ПРОСМОТР И РЕДАКТИРОВАНИЕ РАСТРОВЫХ ИЗОБРАЖЕНИЙ
3.1 Создание многодокументного приложения
С помощью генератора приложений АррWizard создаём каркас приложения для просмотра и редактирования рисунков.
- С помощью команды File/New/Projects/MFC AppWizard (exe) начнем создание приложения. Назовем проект ВМViewer.
- На первом шаге выберем тип приложения Multiple documents.
- Далее можно принять все установки по умолчанию.
3.2 Класс CRaster для работы с растровыми изображениями
Создаем в программе класс CRaster, отвечающий за загрузку и осуществляющий поддержку операций по обработке растрового изображения. Класс CRaster содержит два метода DrawBitmap, выполняющих вывод изображения на контекст устройства. Аргументы одного из методов позволяют задать положение и размеры выводимой области исходного изображения и определить область назначения. По умолчанию изображение выводится полностью в масштабе 1:1, однако с помощью аргументов этой функции можно и изменить масштаб. Второй метод позволяет просто указать позицию начала вывода и масштаб, в котором должно быть нарисовано изображение. Оба метода внутри используют мощную АРI-функцию StretchDIBits().
Режим масштабирования выбирается CDC-методом SetStretchBltMode():
int SetStretchBltMode(int nStretchMode);
Аргумент функции - nStretchMode - режим масштабирования. Поддерживаются следующие режимы масштабирования:
- BLACKONWHITE - выполняет булеву операцию AND между цветом существующих и удаленных пикселов (при уменьшении размера изображения). Этот режим используется, если масштабируется рисунок "черным по белому", т. е. алгоритм масштабирования будет стараться сохранить черные пикселы;
- COLORNCOLOR - этот режим удаляет (добавляет) строки (столбцы) пикселов без каких-либо попыток сохранить содержащуюся в них информацию. Наиболее быстрый режим. Используется, когда необходимо сохранить цвета изображения неизменными;
- WHITEONBLACK - выполняет булеву операцию OR. Этот режим используется, если масштабируется рисунок "белым по черному";
- HALFTONE - преобразует изображение к заданному размеру и при этом трансформирует цвета так, чтобы средний цвет полученной картинки приближался к исходному цвету. Наиболее медленный режим. Однако масштабированная картинка выглядит лучше за счет сглаживания "лестничного эффекта". Этот режим не работает в Windows 95/98, и, похоже, заменяется режимом COLORNCOLOR.
При масштабировании фотографий и цветных рисунков в большинстве случаев наиболее подходящим является режимы COLORNCOLOR и HALFTONE .
Чтобы можно было изменять масштаб вывода изображений, добавим в меню View программы команды Zoom In, Zoom Out, а для установки режима масштабирования – команды Stretch HALFTONE, Stretch COLORNCOLOR. Обработчики этих команд добавим в класс облика (листинг 3.2.1). Эти функции изменяют состояние переменных m_dScale и m_nStretchModeстановки режимов масштабирования также добавлены методы OnUpdateViewStretchhalftone() и OnUpdateViewStretchcoloroncolor() для обработки сообщения UPDATE_COMMAND_UI. В этих функциях можно управлять состоянием соответствующих команд в интерфейсе программы (например, можно делать недоступными команды в зависимости от состояния программы). В данном случае мы просто маркируем соответствующий режим масштабирования.
Листинг 3.2.1 – Обработка команд масштабирования. Файл BMView.cpp
void CBMView::OnViewZoomin()
{// TODO: Add your command handler code here
m_dScale*=2;
OnUpdate(NULL, 0, NULL); }
void CBMView::OnViewZoomout()
{// TODO: Add your command handler code here
m_dScale/=2;
OnUpdate(NULL, 0, NULL); }
void CBMView::OnViewStretchhalftone()
{// TODO: Add your command handler code here
m_nStretchMode=HALFTONE;
OnUpdate(NULL, 0, NULL); }
void CBMView::OnUpdateViewStretchhalftone(CCmdUI* pCmdUI)
{// TODO: Add your command update UI handler code here
pCmdUI->SetCheck(m_nStretchMode==HALFTONE); }
void CBMView::OnViewStretchcoloroncolor()
{// TODO: Add your command handler code here
m_nStretchMode=COLORONCOLOR;
OnUpdate(NULL, 0, NULL); }
void CBMView::OnUpdateViewStretchcoloroncolor(CCmdUI* pCmdUI)
{// TODO: Add your command update UI handler code here
pCmdUI->SetCheck(m_nStretchMode==COLORONCOLOR);}
... обращений к реестру были проконтролированы при помощи Registry Monitor от Sysinternals Corp. 4.4 Описание программы Автоматизированная система для оценки уровня знаний студентов с применением технологии «Клиент-сервер» предназначена для проведения централизованных итоговых занятий по разным дисциплинам в виде интерактивного тестирования. Данный проект поддерживает совместимость с пакетом ...
... система обеспечивает совместное функционирование всех устройств ПК и предоставляет пользователю доступ к его ресурсам. WINDOWS 95, WINDOWS 98, WINDOWS ME, WINDOWS XP. Состав Операционной системы: 13) Программный модуль, управляющий файлами. 14) Командный процессор (выполняет команды пользователя). 15) Программы, обеспечивающие управление работой различных устройств (ввода, ...
... либо записываются на винчестер в виде самостоятельного файла. В связи с тем, что на подавляющем числе современных компьютеров устанавливается операционная система Windows, имеющая собственные ресурсы (Записная Книжка) и специализированное программное обеспечение, встроенные редакторы, например Norton Commander, самостоятельно практически не используются. В составе функций, характерных для ...
... также невысока и обычно составляет около 100 кбайт/с. НКМЛ могут использовать локальные интерфейсы SCSI. Лекция 3. Программное обеспечение ПЭВМ 3.1 Общая характеристика и состав программного обеспечения 3.1.1 Состав и назначение программного обеспечения Процесс взаимодействия человека с компьютером организуется устройством управления в соответствии с той программой, которую пользователь ...
0 комментариев