Zeroes and Ones - портал высоких технологий - Формат BMP ( Часть 3 )
Новости
Главная
Software
Hardware
Mobile
Наши новости
Техника
Электроника
Программирование
Delphi
HTML / CSS
*NIX
Дополнительно
О нас
Контакты
Последние новости

 


Опросы

Я за процессоры:



Популярное


Реклама


Партнеры
Формат BMP ( Часть 3 )
Автор Albinos_X   
12.05.2007 г.
 Эта статья про то, что собой представляет графический формат BMP. Хоть это и один из простых форматов, но из-за того, что существует много вариаций этого формата, то не все моменты очевидны.
bV4RedMask, bV4GreenMask, bV4BlueMask, bV4AlphaMask – Маски заменяющие палитру при сжатии bV4Compression (аналог biCompression) установленном в BI_BITFIELDS – были описаны выше. bV4AlphaMask – дополнительная маска используемая при bV4BitCount равном 32 и служит для описания альфа состовляющей цвета.
bV4CSType – Определяет цветовое пространство DIB. Цветовое пространство это некоторое логическое описание цвета в виде вектора в 3-х или 4-х мерном пространстве, где каждое измерение - интенсивность одного из цветов или альфа-канала. Допустимые значения –
LCS_CALIBRATED_RGB = #0#0#0#0;
LCS_sRGB = 'sRGB';
LCS_WINDOWS_COLOR_SPACE = 'Win ';
PROFILE_LINKED = 'LINK';
PROFILE_EMBEDDED = 'MBED';

- последние 2 варианта доступны только в пятой версии заголовка.
LCS_CALIBRATED_RGB - указывает, что координаты конца вектора цвета и гамма составляющая идут в смежных полях. О гамма составляющей см. ниже.
LCS_sRGB – указывает на то, что будет использоваться цветовое пространство sRGB.
LCS_WINDOWS_COLOR_SPACE – указывается, что используется стандартное для Windows цветовое пространство, обычно соответствует LCS_sRGB.
PROFILE_LINKED – говорит о том, что данные специальной профильной области не содержатся в изображении, хранятся в дополнительном файле имя которого хранится в bV5ProfileData. Профиль должен соответствовать ICC для интерфейса ICM 2.0. Профили были введены начиная с Windows 98, для обеспечения более точной цветопередачи. В этом режиме вектор цвета и гамма игнорируются.
PROFILE_EMBEDDED - говорит о том, что данные специальной профильной области расположены в памяти указатель на которую находится в поле bV5ProfileData. Значение bV5ProfileData – обычно не определено до загрузки изображения в память. В этом режиме вектор цвета и гамма игнорируются.

bV4Endpoints – структура типа TCIEXYZTriple определяющая x, y, z – координаты соответствующие трем цветам - красному, зеленому и синему для логического цветового пространства битмапа, определенного константой LCS_CALIBRATED_RGB.
bV4GammaRed, bV4GammaGreen, bV4GammaBlue – параметр, характеризующий кривую отклика оттенка цвета (красного, зеленого и синего соответственно). Используется только при bV4CSType установленном в LCS_CALIBRATED_RGB.
bV5Intent – тип тонирования (intent) изображения.
Возможные варианты:
LCS_GM_ABS_COLORIMETRIC = $00000008;
LCS_GM_BUSINESS = $00000001;
LCS_GM_GRAPHICS = $00000002;
LCS_GM_IMAGES = $00000004;

Данные параметры определяют каким образом цветовое пространство будет конвертироваться в палитру цветов. Более подробно см. Image Color Management Version 2.0 в MSDN
bV5ProfileData – смещение в битмапе. Для bV5CSType установленном в PROFILE_LINKED указывает на нультерминатную строку хранящую имя файла цветового профиля. Строка может содержать полный путь к файлу профиля включая также сетевой путь. Для bV5CSType установленном в PROFILE_EMBEDDED это смещение собственно на цветовой профиль. Смещение отсчитывается от конца структуры TBitmapV5Header (данные растра не следуют сразу за таблицей цветов). Значение bV5ProfileData имеет смыл только для загруженного в память битмапа и должно быть установлено только после загрузки. Использование таких цветовых профилей допустимо только для файлов, у которых размер структуры (поле bV5Size) TBitmapInfoHeader, равно значению SizeOf(TBitmapV5Header) т.е. 124 байтам.

После структуры TBitmapInfoHeader следует массив из структур TRGBQuad хранящий таблицу цветов. Такой массив может и отсутствовать в зависимости от битности данных. Каждый элемент характеризует один из используемых цветов. Четвертое поле должно быть установлено всегда в нуль. Рекомендуется записывать цвета в порядке их важности см. biClrImportant. Как уже упоминалось для 5-й версии заголовка, в памяти цветовая палитра может идти не сразу за структурой TBitmapInfoHeader а с некоторым смещением.

Растр – представляет собой блок данных каждый байт, которого интерпретируется согласно формату сжатия и битности данных. Для biCompression BI_JPEG, BI_PNG структура блока не тривиальна (определяется форматом). Для BI_RLE8, BI_RLE4 этот блок разбивается на множество чередующихся подблоков различного размера, в каждом из которых хранится либо последовательность цветов с неповторяющимися значениями, либо число повторений некоторого цвета, либо маркеры конца строки или блока данных. Для BI_RGB и BI_BITFIELD это строки изображения, записанные в порядке снизу вверх (если значение высоты битмапа отрицательное, то наоборот). Каждая строка выравнивается на границу двойного слова (4 байта). Лишние младшие биты могут принимать произвольные значения, но обычно устанавливаются в нуль. Размер растра в байтах можно вычислить следующим образом:

( (biWidth + 3) div 4) * 4 * abs(biHeight) * biBitCount div 8 ,
 
где 8 число бит в байте.

Автор: Alexeis (С) ( http://forum.vingrad.ru/index.php?showuser=777&nickname=Alexeis )

Комментарии

Функция доступна только зарегистрированным пользователям.
Войдите под своей учетной записью или зарегистрируйтесь.

Powered by AkoComment 2.0!

 
2001-2007 Jey_k & Albinos_X
Мой ip проверка
ALLDAY.RU - портал обо всем интересном в дизайне