2.1 Общая информация о графическом формате
Графический формат - порядок (структура), согласно которому данные, описывающие изображение, записаны в файле.
Графические данные обычно разделяются на два класса: векторные и растровые. Векторные данные используются для представления прямых, многоугольников, кривых и т. п., с помощью определенных в числовом виде базовых точек. Растровые данные представляют собой набор числовых значений, определяющих яркость и цвет отдельных пикселов. Пикселами (или пикселями - от английского pixel) называются минимальные элементы (цветные точки), из которых формируется растровое изображение.
Далее под растром будем понимать массив пикселов (массив числовых значений). Для обозначения массива пикселов часто используется термин bitmap (битовая карта). В bitmap каждому пикселу отводится определённое число битов (одинаковое для всех пикселов изображения). Это число называется битовой глубиной пиксела или цветовой глубиной изображения, т.к. от количества битов, отводимых на один пиксел, зависит количество цветов изображения. Наиболее часто используется цветовая глубина 1, 2, 4, 8, 15, 16, 24 и 32 бита.
Растровый формат используется для хранения растровых данных. Файлы такого типа особенно хорошо подходят для хранения изображений реального мира, например оцифрованных фотографий. Растровые файлы содержат битовую карту изображения и ее спецификацию. Наиболее распространенные растровые форматы: ВМР, ТIFF, GIF, РСХ, JРЕС.
В данном проекте будет использоваться ВМР формат.
2.2 Общее описание формата ВМР
Microsoft Windows Bitmap (ВМР) - собственный растровый формат операционной системы Windows. Формат основан на внутренних структурах представления растровых данных Windows. Формат совершенствовался и развивался по мере появления новых версий Windows. Первоначально был очень простым, содержал лишь растровые данные и не поддерживал сжатие. Растровые данные представляли собой индексы в цветовой палитре, которая была фиксированной и определялась графической платой. Поэтому этот формат называют аппаратно-зависимым (Device Dependent Bitmap, DDB), он был ориентирован на графические платы для IВМ РС (СGА,EGA, НERCULES) и другие.
Развитием формата ВМР стало введение в него поддержки изменяемой цветовой палитры. Это позволило хранить информацию о цветах вместе с растровыми данными. Такое изменение формата позволило сделать хранимые изображения аппаратно-независимыми (Devise Independent Bitmap, DIB). Иногда аббревиатуру DIВ используют как синоним ВМР.
2.3 Структура файла ВМР
Файлы ОБВ исходного формата ВМР содержали два раздела: заголовок файла и растровые данные (рис. 2.3.1).
Заголовок файла |
Растровые данные |
Рисунок 2.3.1 - Структура файла DDВ исходного формата ВМР
Файлы более поздних версий содержат четыре раздела: заголовок файла, информационный заголовок растра, палитру цветов и растровые данные (рис. 2.3.2).
Заголовок файла |
Заголовок растра |
Палитра цветов |
Растровые данные |
Рисунок 2.3.2 - Структура ВМР-файла
Рассмотрим в деталях структуру данных файла формата ВМР версии 3.x, появившегося с операционной системой Microsoft Windows 3.x. Этот формат поддерживается большинством существующих в настоящее время приложений.
Все версии формата ВМР начинаются с 14-байтового заголовка-структуры.
Листинг 2.3.1 - Структура данных файла формата ВМР версии 3.x
BITMAPFILEHEADER :
Typedef struct tagBITMAPHEADER
{ WORD bfType; //тип файла, должен быть 4d42h («ВМ»)
DWORD bfSise //размер файла в байтах
WORD bfReserved1; //зарезервировано, должен быть 0
WORD bfReserved2; // зарезервировано, должен быть 0
DWORD bfOffBits; //смещение в байтах до начала растровых данных
} BITMAPFILEHEADER;
// За заголовком файла следует заголовок растра. Его длина составляет 40 байтов.Typedef struct tagBITMAPINFOHEADER
{DWORD biSize; //размер этого заголовка в байтах
LONG biWidth ; //ширина изображения в пикселах
LONG biHeight; //высота изображения в пикселах
WORD biplanes; //количество цветовых плоскостей
WORD bibitCount; //количество битов на пиксел
DWORD biCompression; //используемые методы сжатия
DWORD biSizeImage; //размер растра в байтах
LONG biXPelsPerMeter; //вертикальное разрешение
LONG biYPelsPerMeter; //горизонтальное разрешение
DWORD biClrUsed; //количество цветов в изображении
DWORD biClrImportant; //минимальное количество «важных» цветов
} BITMAPINFOHEADER
//За заголовком растра может следовать палитра цветов, состоящая из //последовательности 4-байтовых структур RGBQUARD
Typedef struct _RGBQUARD
{BYTE rgbBlue; //синяя составляющая
BYTE rgbGreen; // зелёная составляющая
BYTE rgbRed; //красная составляющая
BYTE rgReserved; //заполнитель(всегда 0)
}RGBQUARD;
//Структура BITMAPINFOHEADER и структуры RGBQUARD собираются в структуре BITMAPINFO:
Typedef struct tagBITMAPINFO
{BITMAPINFOHEADER bmiHeader;
RGBQUARD bmiColors[1];
} BITMAPINFO;
После структуры BITMAPINFO на расстоянии bfOffBits (поле структуры BITMAPFILEHEADER) от начала файла начинаются растровые данные. Растровые данные представляют собой индексы в палитре цветов (в случае если bibitCount равно 1, 4, 8) или реальные значения цветов пикселов (в случае если bibitCount равно 24). Если bibitCount равно 24, то каждый пиксел представляется тремя байтами: первый байт - интенсивность синего цвета, затем по байту на зеленый и красный цвет. Этот формат цвета называется RGB888 или RGB24.
Растровые данные, соответствующие одной строке пикселов изображения, вне зависимости от формата цвета должны быть выровнены на границу двойного слова DWORD, т. е. каждая строка пикселов должна описываться целым числом двойных слов. Например, строка из 5 пикселов по 24 бита (3 байта) на пиксел может быть описана 15 байтами, но длина строки растровых данных в формате ВМР должна быть 16 байтов. Последний байт будет служить лишь для целей выравнивания.
Формат ВМР версии 3.x имеет разновидность (для Windows NT), предназначенную для хранения растровых данных с пиксельной глубиной 16 и 32 битов. Этот формат имеет точно такую же структуру заголовка растра BITMAPINFOHEADER. Его длина составляет 40 байтов. Отличие заключается в том, что поле bibitCount может принимать значения 16 и 32.
При пиксельной глубине 16 битов для хранения цвета пиксела отводится два байта (слово - тип WORD), каждому компоненту цвета пиксела отводится по 5 битов (формат цвета RGВ555). Младшие 5 битов задают интенсивность синего цвета, затем по 5 битов на зеленый и красный цвет, старший бит в слове не используется.
При пиксельной глубине 32 бита для хранения цвета пиксела отводится 4 байта (двойное слово - тип DWORD). При этом на каждый компонент цвета отводится по 8 бит, так же как и при 24-битной глубине, а старший байт в DWORD не используется (формат цвета RGВ888).
Дополнительные возможности этой разновидности формата проявляются, если указать значение поля biCompression, равное 3. В этом случае вслед за структурой BITMAPINFOHEADER (на месте палитры цвета) следуют три поля DWORD: RedMask, GreenMask, BlueMask, которые задают битовые маски для компонентов цвета пиксела. Биты в этих масках обязательно должны быть смежными и не содержать перекрывающихся полей.
Для 16-битовых растровых данных часто применяют формат RGВ565, который задается следующей маской.
RedMask = 0хF8000000; // 1111 1000 0000 0000 0000 0000 0000 0000
GгееnМаsk = 0х07Е00000; // 0000 0111 1110 0000 0000 0000 0000 0000
В1uеМаsk = 0х001F0000; // 0000 0000 0001 1111 0000 0000 0000 0000
С помощью этой маски из значения WORD, задающего цвет пиксела, извлекается значение каждого цветового компонента. В формате RGВ565 красному и синему цветам отводится по 5 битов, а зеленому - 6 битов. Такое неравноправие обосновывают тем, что человеческий глаз более восприимчив к зеленому цвету, поэтому тщательная запись его градаций позволяет повысить качество изображения.
Для 32-битовых растровых данных используют формат RGB101010, определяющий по 10 битов на каждый цвет, который задается следующей маской.
RedMask = 0ХFFC00000; // 1111 1111 1100 0000 0000 0000 0000 0000
GгееnМаsk = 0х00ЗFF000; // 0000 0000 0011 1111 1111 0000 0000 0000
В1uеМаsk = 0х00000FFС; // 0000 0000 0000 0000 0000 1111 1111 1100
По сравнению с форматом RGВ888 такое представление позволяет описать большее количество цветов.
... обращений к реестру были проконтролированы при помощи 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 комментариев