
- •Векторная и растровая графика
- •Цветовые модели
- •Палитра
- •2. Описание библиотеки для работы с графикой Wingraph.H
- •3. Методы сжатия используемые для графических форматов
- •Дискретные источники информации
- •Условная информация и энтропия
- •Кодирование дискретных источников информации
- •Основные классы статических кодов для дискретных источников
- •Адаптивные методы сжатия информации
- •Словарные методы сжатия класса lz
- •4. Структура и примеры графических растровых форматов
- •Формат bmp
- •Описание формата pcx
- •Декодирование файлов в формате pcx
- •Описание информации о палитре
- •Формат gif
- •Формат jpeg
- •Этапы обработки изображения
- •Литература
Описание формата pcx
Файлы изображений, которые используются в продуктах семейства PC Paintbrush и FRIEZE, были разработаны фирмой Zsoft. Открывать или импортировать файлы PCX могут почти все графические приложения для персональных компьютеров. Цветовые возможности 1, 2, 4, 8 или 24- битовый цвет. Всегда применяется сжатие RLE.
Файлы изображения PCX начинается с заголовка длиной 128 байт. Затем идут закодированные графические данные. При кодировании используется простой алгоритм, основанный на методе длинных серий. Если в файле запоминается несколько цветовых слоев, каждая строка изображения запоминается по цветовым слоям
Метод кодирования состоит в следующем: ДЛЯ каждого байта X, прочитанного из файла. ЕСЛИ оба старших бита X равны 1, то <повторитель> = значению, хранящемуся в 6 младших битах X <данные> = находятся в следующем байте за X. ИНАЧЕ <повторитель> = 1 <данные> = X Поскольку для насыщения данного алгоритма требуется в среднем 25% неповторяющихся данных и, по меньшей мере, наличие смещения между повторяющимися данными, то размер получаемого файла, как правило, оказывается приемлемым.
Формат заголовка PCX
typedef struct TPCXHeaderStruct
{
unsigned char ID; //Постоянный флаг 10 = ZSoft .PCX
unsigned char Version; // Информация о версии
unsigned char Coding; //1 = PCX кодирование RLE
unsigned char BitPerPixel; // Число бит на пиксел
unsigned int XMin; // Размеры изображения
unsigned int YMin;
unsigned int XMax;
unsigned int YMax;
unsigned int HRes; // Горизонтальное разрешение создающего устройства
unsigned int VRes; // Вертикальное разрешение создающего устройства
unsigned char Palette[48]; // Набор цветовой палитры (для 16-цветного изображения)
unsigned char Reserved;
unsigned char Planes; // Число цветовых слоев
unsigned int BytePerLine; // Число байт на строку в цветовом слое (для PCX-файлов всегда должно быть четным)
unsigned int PaletteInfo; // Как интерпретировать палитру: 1 = цветная/черно-белая, 2 = градации серого
unsigned int HScreenSize;
unsigned int VScreenSize;
unsigned char Filler[54]; // Заполняется нулями до конца заголовка
} TPCXHeader;
Смещение |
Обозначение |
Длина |
Описание / комментарий |
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 |
Заполняется нулями до конца заголовка |
Все переменные длины 2 являются целыми.