русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Битовые образы, не зависящие от устройства.

Формат DIB (device independent bitmap) содержит таблицу цветов, которая содержит информацию о преобразовании пикселей в RGB формат. Фактически, данный формат не является объектом GDI, однако является очень удобной формой для хранения и передачи изображения между программами и компьютерами. Каждому пользователю компьютера известен этот формат – это не что иное, как файл с расширением *.bmp. Приведем описание формата этого файла.

Файл *.bmp начинается с секции заголовка, определенной структурой BITMAPFILEHEADER. Эта структура имеет пять полей:

Поле Размер Описание
bfType WORD Байты «ВМ» для битовых образов
bfSize DWORD Общий размер файла
bfReserved1 WORD Установлено в 0
bfReserved2 WORD Установлено в 0
bfOffBits DWORD Смещение битового образа от начала файла

За этой информацией следует другой заголовок, определенный структурой BITMAPINFOHEADER. Структура имеет 11 полей.

Поле Размер Описание
biSize DWORD Размер структуры в байтах
biWidth LONG Ширина битового образа в пикселях
biHaight LONG Высота битового образа в пикселях
biPlanes WORD Установлено в 1
biBitCount WORD Число битов цвета на пиксель (1,4,8,24)
biCompression DWORD Схема компрессии (если нет – 0)
biSizeImage DWORD Размер битов битового образа в байтах (нужен только при компрессии)
biXPelsPerMeter LONG Разрешение в пикселях на метр по горизонтали
biYPelsPerMeter LONG Разрешение в пикселях на метр по вертикали
biClrUsed DWORD Число цветов, используемых в изображении
biClrImportant DWORD Число важных цветов в изображении

Приведенная структура может иметь различный размер, определяемый полем biSize. Первые 5 параметров являются обязательными. Остальные могут присутствовать в файле, могут и нет. Кроме этого, пользователь может добавлять свои оригинальные записи в конец структуры. Если biClrUsed установлено в ноль и число битов на пиксель равно 1,4,8, то сразу за данной структурой следует таблица цветов, состоящая из двух или более структур RGBQUAD (при 1 – две, при 4 – шестнадцать, и т.д. ), каждая из которых определяет значение цвета:

Поле Размер Описание
rgbBlue BYTE Интенсивность голубого
rgbGreen BYTE Интенсивность зеленого
rgbRed BYTE Интенсивность красного
rgbReserved BYTE Равно 0

Число структур RGBQUAD может быть напрямую задано в поле biClrUsed.

За таблицей цветов следует массив битов, определяющих битовый образ. Этот массив начинается с нижней строки пикселей. Каждая строка начинается с левого пикселя. Каждый пиксель представлен 1, 4, 8 или 24 битами. Во-первых трех случаях число, записанное в битовом образе определяет номер RGBQUAD- структуры в таблице цветов. В случае 24-х бит – это, фактически, и есть 3 байта RGB-представления цвета. В последнем случае таблица цветов может отсутствовать.

Для вывода битовых образов, не зависящих от устройства, существует несколько функции GDI. Первая из них позволяет копировать битовый образ в контекст устройства:

int SetDIBitsToDevice(

HDC hdc,// указатель на контекст устройства

int XDest,// x-координата верхнего левого угла

int YDest,// y-координата верхнего левого угла

DWORDdwWidth,// ширина выводимого изображения

DWORD dwHeight,// высота выводимого изображения

int XSrc,// x-координата отступа в изображении

int YSrc,// y-координата отступа на контексте

UINT uStartScan,// первая сканируемая линия изображения

UINT cScanLines,// число сканируемых линий

CONST VOID *lpvBits,// адрес битового образа

CONST BITMAPINFO *lpbmi,//адрес структуры BITMAPINFO

UINT fuColorUse // признак RGB или палитры

);

Следует заметить, что в функции используется структура BITMAPINFO, а не присутствующая в файле BITMAPINFOHEADER, которая определена в Windows как:

typedef struct tagBITMAPINFO {

BITMAPINFOHEADER bmiHeader; // Уже знакомая нам структура

RGBQUAD bmiColors[1]; // Таблица цветов

} BITMAPINFO;

Рассмотренная функция производит копирование битов в выбранный контекст. Другая функция, позволяет при этом масштабировать выводимое изображение, т.е. автоматически изменяет размер картинки до размеров области вывода:

int StretchDIBits(

HDC hdc,// указатель на контекст устройства

int XDest,// x-координата верхнего левого угла в контексте

int YDest,// y-координата верхнего левого угла в контексте

int nDestWidth,// ширина выводимого изображения в контексте

int nDestHeight,// высота выводимого изображения в контексте

int XSrc,//x-координата верхнего левого угла выводимой части изображения

int YSrc,//у-координата верхнего левого угла выводимой части изображенияint nSrcWidth,// ширина выводимого изображения в битовом образе

int nSrcHeight,//высота выводимого изображения в битовом образе

CONST VOID *lpBits,// адрес битового образа

CONST BITMAPINFO *lpBitsInfo,// адрес структуры BITMAPINFO

UINT iUsage,// флаг использования цвета

DWORD dwRop // растровая операция

);

Флаг использования цвета определяет, есть ли в структуре BITMAPINFO таблица палитры (значение флага - DIB_PAL_COLORS) или в битовом образе содержится полная информация о цвете (DIB_RGB_COLORS). Последний параметр функции определяет код растровой операции. Наиболее часто используемые из них:

BLACKNESS Заполняет выбранную область приемника черным цветом

DSTINVERT Инвертирует выбранную область приемника

NOTSRCCOPY Копирует изображение с инверсией.

SRCCOPY Копирует изображение

WHITENESS Заполняет выбранную область приемника белым цветом

Просмотров: 529


Вернуться в оглавление



Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.