Лабораторная работа: Бібліотека ASM-86 для перегляду графіки в стандартах BMP та PCX
Метод кодування полягає в наступному:
ДЛЯ кожного байта X, прочитаного з файлуЯКЩО обоє старших біта X рівні 1, то<повторювач> = 6 молодшим биткам X<дані> = наступному байту за XІНАКШЕ<повторювач> = 1<дані> = X
Формат заголовка PCX
Зміщений. Позначення Довжина Опис/коментар
0 Manufacturer 1 Постійний прапор 10 = ZSoft .PCX
1 Version 1 Інформація про версію:
0 = Версія 2.5
2 = Версія 2.8 з інформацією про палітру
3 = Версія 2.8 без інформації про палітру
5 = Версія 3.0
2 Encoding 1 1 = .PCX кодування довгими серіями
3 Bits per pixel 1 Число біт на піксел у шарі
4 Window 8 Розміри зображення (Xmin, Ymin) - (Xmax, Ymax) у пікселах включно
12 HRes 2 Горизонтальний дозвіл пристрою, що створює
14 VRes 2 Вертикальний дозвіл пристрою, що створює
16 Colormap 48 Набір колірної палітри (див. далі текст)
64 Reserved 1
65 NPlanes 1 Число колірних шарів
66 Bytes per Line 2 Число байт на рядок у колірному шарі (для PCX-файлів завжди повинне бути парним)
68 Palette Info 2 Як інтерпретувати палітру:
1 = кольорова/чорно-біла,
2 = градації сірого
70 Filler 58 Заповнюється нулями до кінця заголовка
Декодування файлів у форматі PCX
Спочатку визначите розмір зображення, обчисливши
[XSIZE = Xmax - Xmin + 1] і [YSIZE = Ymax - Ymin + 1].
Потім обчислите, скільки байтів потрібно для збереження одного незжатого рядка розгорнення зображення:
TotalBytes = NPlanes * BytesPerLine
Відзначимо, що оскільки завжди використовується ціле число байтів, можливе існування невикористовуваних даних наприкінці кожного рядка розгорнення. TotalBytes показує скількох пам'ятей повинне бути доступно для декодування кожного рядка розгорнення, включаючи невикористовувану інформацію на правому кінці кожного рядка.