
- •Растровые файлы
- •Идентификатор файла
- •Неиспользуемое пространство
- •Пример 1: Заголовок формата Microsoft Windows Bitmap, версия 1.Х
- •Пример 2: Заголовок формата Sun Raster
- •Пример 3: Заголовок формата Kofax Raster
- •Оптимизация чтения заголовка
- •Организация данных в виде плоскостей
- •Фрагменты
- •Палитра
Неиспользуемое пространство
В конце заголовка могут располагаться неиспользуемые поля, иногда называемые набивкой, заполнителе зарезервированным пространством или зарезервированными полями. Зарезервированные поля не содержат данных, описываются и не структурируются. Их размеры и местоположение в заголовке известны. Если возникнет необход мость расширить формат, то сведения о новых данных заносятся в зарезервированное пространство. Таким образ< сохраняется совместимость с программами, поддерживающими старые версии этого формата, а проблемы, связанн) с появлением новых версий, сводятся к минимуму. Заголовок формата имеет фиксированную длину и структу! В процессе модификации формата его структура усложняется, при этом новые поля добавляются в зарезервированн] области заголовка без изменения его размеров. Часто заголовок специально расширяется зарезервированными поля» до общей длины 128, 256 или 512 байтов. Это связано с необходимостью учитывать размеры буферов ввода/выво для повышения производительности системы. Наличие таких полей свидетельствует о том, что автор формата забыл о проблемах производительности и кэширования файлов.
Иногда зарезервированные поля являются просто артефактами, которые возникают в процессе развития форма или остаются от рабочих версий. Распространитель обычно изменяет или расширяет файловый формат только п давлением обстоятельств или в ответ на требования рынка, обусловленные непредвиденным развитием технологи Как в одном, так и в другом случае развитие формата крайне трудно планировать, что обуславливает стремлен производителя минимизировать усилия на "встраивание" новых данных. Зачастую первое, чем приходится жертв вать, — это совместимость с предыдущими версиями.
Примеры растровых заголовков
Пример 1: Заголовок формата Microsoft Windows Bitmap, версия 1.Х
II
II Структура заголовка формата MS Windows l.x Bitmap Format
// BYTE — это однобайтовое беззнаковое символьное значение
// WORD — это короткое беззнаковое целое (16 битов)
//
typedef struct _WinHeaderlx
{
//
// Тип Имя Смещение Комментарий
//
WORD Type; /* OOh Идентификатор типа файла (всегда 0) */
WORD Width; /* 02h Ширина растра в пикселях */
WORD Height; /* 04h Высота растра в пикселях */
WORD Width; /* 06h Ширина растра в байтах */
BYTE Planes; /* 08h Количество цветовых плоскостей */
BYTE BitsPixel; /* 09h Количество битов на пиксель */
} OLDWINHEAD;
Как видно из комментариев, этот заголовок содержит идентификатор типа файла, а также информацию о шири и высоте изображения, ширине одной строки изображения (в байтах), количестве цветовых плоскостей и количестве битов на пиксель. Это необходимый минимум информации, позволяющий описать растровое изображение таю образом, чтобы оно могло быть прочитано и визуализировано на произвольно выбранном оборудовании.
Обратите внимание на то, что заголовок Windows Bitmap l.x не содержит информации о цветах и сжатии дани изображения. Расширенный формат изображений должен предусматривать возможности описания цветовой информации и хотя бы простой схемы сжатия. Следующий пример — более сложный заголовок формата файла изображения Sun Raster