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

 

 

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

 

 

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

 

 


Поле Размер bfType WORD bfSize DWORD bfReserved1 WORD bfReserved2 WORD bfOffBits DWORD


Описание

Байты «ВМ» для битовых образов Общий размер файла Установлено в 0

Установлено в 0

Смещение битового образа от начала файла


 

 

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

 

 


Поле Размер biSize DWORD biWidth LONG biHaight LONG biPlanes WORD biBitCount WORD biCompression DWORD biSizeImage DWORD

 

biXPelsPerMeter LONG biYPelsPerMeter LONG biClrUsed DWORD biClrImportant DWORD


Описание

Размер структуры в байтах

Ширина битового образа в пикселях Высота битового образа в пикселях Установлено в 1

Число битов цвета на пиксель (1,4,8,24) Схема компрессии (если нет – 0)

Размер битов битового образа в байтах (нужен только при компрессии)

Разрешение в пикселях на метр по горизонтали Разрешение в пикселях на метр по вертикали Число цветов, используемых в изображении Число важных цветов в изображении


 

 

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


– 105 –

 

 


Поле Размер 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-координата верхнего левого угла

 

 

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

 

 

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 Заполняет выбранную область приемника белым цветом


– 107 –

 

 








Дата добавления: 2016-11-22; просмотров: 507;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.022 сек.