
- •Растровые файлы
- •Идентификатор файла
- •Неиспользуемое пространство
- •Пример 1: Заголовок формата Microsoft Windows Bitmap, версия 1.Х
- •Пример 2: Заголовок формата Sun Raster
- •Пример 3: Заголовок формата Kofax Raster
- •Оптимизация чтения заголовка
- •Организация данных в виде плоскостей
- •Фрагменты
- •Палитра
Пример 2: Заголовок формата Sun Raster
II
II Структура заголовка формата Sun Raster Image File Format
// WORD — это длинное целое без знака (32 бита)
//
typedef struck _SunRasterHead
{
//
//Тип Имя Смещение Комментарий
//
WORD Magic; /* OOh Магическое число (59a66a95h) */
WORD Width; /*04h Ширина изображения в пикселях */
WORD Height; /*Q8h Высота изображения в пикселях. */
WORD Depth;. /*Och Количество битов на пиксель */
WORD Length; /*10h Длина изображения в байтах .*/
WORD Type; /*14h Тип кодирования */
WORD MapType; /*18h Тип цветовой таблицы */
WORD MapLength; ICh Длина цветовой таблицы в байтах */
} SUNRASHEAD;
Заголовок формата Sun Raster, кроме информации, описанной в заголовке Windows Bitmap 1 .х, содержит сведения о типе кодирования, а также о типе и размере цветовой таблицы, или палитры, связанной с этими растровыми данными.
Ни в одном из этих двух заголовков нет поля текстового описания. Теперь рассмотрим заголовок файлового формата Kofax Raster.
Пример 3: Заголовок формата Kofax Raster
//
// Структура заголовка формата Kofax Raster Image File Format
// LONG — это длинное целое со знаком (32 бита)
// SHORT — это короткое целое со знаком (16 битов)
//
typedef struct _KofaxHeader
{
//
//Тип Имя Смещение. Комментарий
//
LONG Magic; /* Ooh Магическое число (68464B2Eh) */
SHORT HeaderSize; /* 04h Размер заголовка */
SHORT HeaderVersion; /* 06h Номер версии заголовка */
LONG Image Id; /* Oah Идентификатор изображения */
SHORT Width; /* Och Ширина изображения в байтах */
SHORT Length; /* Oeh Длина изображения в строках развертки */
SHORT Format; /* 10h Кодирование */
CHAR Bitsex; /* llh He 0, если Bitsex инвертирован */
CHAR Color; /* 12h He 0, если цвет инвертирован */
SHORT Xres; /* 14h Количество точек на дюйм по горизонтали */
SHORT Yres; /* 16h Количество точек на дюйм по вертикали */
CHAR Planes; /* 18h Количество плоскостей */
CHAR BitsPerPixel; /* 19h Количество битов на пиксель */
SHORT PaperSize; /* lAh Исходный размер бумаги */
CHAR Reservedl[20]; /* Ich Резервное поле */
LONG Dcreated; /* 30h Дата создания */
LONG Dmodified; /* 34h Дата модификации */
LONG Daccessed; /* 38h Дата доступа */
CHAR Reserved2[4]; /* 3Ch Резервное поле */
LONG loffset /* 40h Смещение Index Text Info */
LONG Ilength /* 44h Длина Index Text Info */
LONG Coffset /* 48h Смещение комментария */
LONG Clength /* 4Ch Длина комментария в байтах */
LONG Uoffset /* 50h Смещение данных пользователя */
LONG Ulength /* 54h Длина данных пользователя в байтах */
LONG Doffset /* 58h Смещение данных изображения */
LONG Diength /* 5Ch Длина данных изображения в байтах */
CHAR Reserved3[32]; /* 60h Резервное поле */
} KFXHEAD;
Обратите внимание на то, что заголовок формата Kofax Raster значительно больше, чем заголовки Windows Bitmap или Sun Raster. Он включает поля, задающие горизонтальное и вертикальное разрешения, размер бумаги, на которую будет выведено изображение, смещения различных вспомогательных данных в файле, время и дату создания изображения, его последней модификации и доступа.
Несколько полей в этом заголовке помечены как резервные. Заголовок формата Kofax Raster специально дополнен до 128 байтов, чтобы можно было использовать часто применяемый размер буфера для чтения и записи, хотя в представленной здесь модификации заголовок занимает всего 72 байта. Спецификация формата Kofax Raster гарантирует, что первые 128 байтов каждого файла изображения Kofax можно интерпретировать как заголовок в любой модификации формата. Программа может просто игнорировать зарезервированные поля. Общая информация о зарезервированных полях представлена в разделе "Неиспользуемое пространство".