Перетворення форматів графічних файлів
BYTE EgaPalette[48];Палітра
BYTE Reserved;Зарезервовано
BYTE NumberOfPlanes;Кількість площин
WORD BytesLinePlane;Кількість байтів на рядок
WORD PaletteInfo;Тип палітри
WORD HScreenSize;Розмір екрану по горизонталі
WORD VScreenSize;Розмір екрану по вертикалі
BYTE Filler[54];Зарезервовано
} PCXHEADER;
Поле Id містить 0Ah, це означає, що даний файл направді є файлом формату PCX. Натепер підтримується лише один тип кодування – RLE, якому відповідає значення 1. Назви інших полів говорять самі за себе.Дані у форматі PCX стискаються за допомогою простого алгоритму групового кодування, у якому група байтів, що повторюються, замінюється двома байтами: кількістю значень та самим значенням. Перший байт цієї двобайтової групи містить у двох старших бітах по одиниці, а у шести менших – кількість значень, які повторюються, що визначає максимальну довжину – 63 пікселя. Другий байт містить восьмибітове значення, що на виході повторюється стільки разів, скільки було задано у молодших шести бітах першого байту. Далі йде наступна пара кількість/значення. Якщо старші два біти першого байту нулі, то цей байт містить саме значення, а кількість повторень вважається 1. Отримані дані кодують колір послідовних пікселів, по три на піксель у форматі RGB. Але дані записуються не триплетами, а спочатку усі червоні компоненти для одного рядка растру, потім так само зелені, а потім сині. При цьому палітра не використовується.
Формат BMP
Формат BMP був створений компанією Microsoft спеціально для зберігання растрових даних у системі Windows. Дані заголовку та й його розмір змінювалися й доповнювалися з випуском нових версій цієї операційної системи. Ми будемо розглядати формат BMP версії три. Перший 14-байтовий заголовок однаковий для усіх версій:
Typedef struct
BITMAPFILEHEADER {
UINT16 type;Тип файлу – 4D42h ("BM")
UINT32 size;Розмір файлу в байтах
INT16 xHotspot;Резерв
INT16 yHotspot;Резерв
UINT32 offsetToBits;Початок даних зображення
} BITMAPFILEHEADER;