Хранение графики в Windows.

Основное средство графики в Windows – это Paint Brush. Под него был разработан формат BMP. Существует много версий, но они мало конфликтуют друг с другом.

В литературе даже не приводится разница между версиями этих форматов. Файл BMP состоит из трёх частей:

1. Заголовок BITMAP FILE.

2. Информационная часть BITMAP INFO.

3. Данные BITMAP.

 

1. Структура заголовка. Он состоит из пяти записей.

 

Смещение Длина, байт Описание
Здесь записано “BM” – это признак того, что файл в формате BMP.
Длина файла в байтах.
Резервная запись
Резервная запись
Указывает на смещение до начала области данных.

 

Сама длина заголовка постоянная.

2. Он описывает параметры изображения. Имеет переменную длину. Имеет переменную длину.

Запись 1. Длина 4 байта. Длина данной части в байтах.

Запись 2. Длина 4 байта. Ширина рисунка в пикселах.

Запись 3. Длина 4 байта. Высота рисунка в пикселах.

Запись 4. Длина 2 байта. Признак разбиения на битовые плоскости.

Запись 5. Длина 2 байта. Количество бит на пиксел.

Запись 6. Кодируется тип сжатия данных.

Запись 7. Длина 4 байта. Размер изображения в байтах.

Запись 8. Разрешение по горизонтали в пикселах.

Запись 9. Разрешение по вертикали в пикселах.

Запись 10. Количество используемых цветов и запись количества основных типов.

Следующая запись будет начинаться со смещения 36h. Начиная с этой записи описывается палитры. Количество цветов в поле со смещением 2Eh (обозначим n), тогда длина 4×n.

Первый байт – интенсивность синего.

Второй байт – интенсивность зелёного.

Третий байт – интенсивность красного.

Четвёртый байт – резервный, заполнен нулями.

В этой палитре можно использовать не все записи. Те, которые относятся к данному изображению должна быть в начале записи. Такая структура ускоряет обработку изображения.

3. Само изображение. Разбито на строчки и столбцы.

Первое ограничение – разрывы строк не допускаются. Если строка в изображении не участвует, то её нужно заполнить нулями.

Второе нестандартное – то, что хранится оно с левого нижнего угла построчно.

Метод сжатия RLE4 или RLE8. Полностью соответствуют ранее рассмотренному. Поле со смещением 1Сh задаёт количество бит на пиксел. В нём запсианы стандартные цифры.

1) Если записана 1, то это чёрно-белое изображение. Тогда 1 – заполнение первым цветом палитры, а 0 – заполнение вторым цветом палитры.

2) Если записана 4, то это 16-цветное изображение. В палитре реальное описание состоит из 16 полей по 4 байта. Чтобы сократить количество пустых заполнений нулями, то каждый байт записи палитры трактуется следующим образом:

Одна запись – это запись двух точек, причём старшие полбайта принадлежат дальней точке, а младшие полбайта принадлежат первой точке.

Пример.

2 – цвет записан вторым в палитре и принадлежит он второй точке.

5 – цвет записан пятым в палитре и принадлежит первой точке.

3) Если записано 8, то используется 256 цветов. Использован 1 байт на точку. Палитра состоит из 256 записей, каждое поле по 4 байта.

4) Если записано 24, то 16777216 цветов. Чтобы записать такую палитру, надо много памяти, но поступают по другому. палитра кодируется в области данных. В резервный байт вводят интенсивность. При этом длина записи фактически не увеличивается.

 

Сжатие. Там, где использовано сжатие:

0 – не упаковано.

1 – RLE8

2 – RLE4

Таким образом хранятся любой сложности растровые рисунки. Автоматического сжатия ни Windows, ни Paint Brush не производят. Чтобы использовать сжатие, надо использовать специальные команды при сохранении файла. Ламеры хранят рисунки BMP неупакованными.

 

Графика ещё хранится в специфических форматах. Стартовые заставки хранятся в формате RLE. По своей сути ничем не отличающегося от формата BMP со сжатием RLE4, так как для заставок не требуется большее количество цветов. Формируются в такой формат программой WinGIF.