Главная » Ассемблер, Железо » Формат PCX для 256-цветных изображений

0

Если необходимо экономить дисковое пространство, то для 256- цветных изображений лучше использовать формат PCX со сжатием по алгоритму Run Length Encoding (RLE). Файл PCX состоит из трех частей: заголовка, сжатого изображения и таблицы палитры. Формат заголовка файла PCX показан в табл. 4.11.

Вообще говоря, данные в файлах PCX могут храниться в несжатом виде — в этом случае байт признака уплотнения данных в заголовке файла имеет значение 0. Неупакованный PCX формат может использоваться, например, для хранения черно-белых фотографий в формате 256 оттенков серого.

Однако в целях сокращения объема файла обычно применяется сжатие по RLE. Способ кодирования RLE предполагает выделение последовательностей пикселов одинакового цвета и запоминание количества повторений в специальном байте-счетчике. Каждая строка изображения кодируется отдельно, причем правила кодирования следующие:

•      отдельная точка со значением кода цвета менее COh будет просто представлена своим кодом;

•      отдельная точка со значением кода цвета, которое больше или равно COh, записывается в виде пары кодов, первым из которых будет байт счетчика со значением Clh, а вторым — собственно байт кода цвета точки;

•      горизонтальный отрезок из N (не более 63) одноцветных точек будет представлен парой кодов, первым из которых будет байт счетчика со значением N + COh, а вторым — байт кода цвета.

Таблица 4.11. Формат заголовка файла PCX


Смещение

Размер

Описение

00h

BYTE

Сигнатура OAh — признак файла PCX

01 h

BYTE

Версия файла PCX: 0 — версия 2.5;

2         — версия 2.8 с описанием палитры;

3          — версия 2.8 без описания палитры; 5 — версия 3.0

02h

BYTE

Признак уплотнения данных: 0 — сжатие не производилось; 1 — сжатие выполнено методом RLE)

03h

BYTE

Количество цветовых слоев

04h

WORD

Координата Xmln левого верхнего угла изображения

06h

WORD

Координата Ymln левого верхнего угла изображения

08h

WORD

Координата Хтах правого нижнего угла изображения

OAh

WORD

Координата Ymax правого нижнего угла изображения

OCh

48 байт

Описание палитры для 16-Цветного режима (16 записей, по 3 байта на каждый цвет)

Смещение

Размер

Описание

 

40h

BYTE

Зарезервировано

 

41h

BYTE

Число битовых плоскостей

 

42h

WORD

Число байтов в одной строке изображения

 

 

 

(всегда четное)

 

44h

WORD

Признак типа изображения: 1 — цветное

 

 

 

или черно-белое; 2 — с градациями серого

 

46h

58 байт

Зарезервировано

 

Если в байте версии файла PCX установлено значение 5, то последние 769 байт файла хранят структуру, содержащую байт — признак формата регистров ЦАП и следующую за ним таблицу палитры (768 байт). Если в байте признака формата регистров записано значение OAh, то используется 6-разрядное кодирование основных цветовых компонентов, а если значение OCh — 8-разрядное кодирование. Таблицу нужно загрузить в регистры ЦАП видеоконтроллера при помощи подфункции 12h функции 10h прерывания Int 10h в соответствии со значением байта признака формата. Каждая из 256 строк таблицы состоит из трех байтов, содержащих значения компонентов соответствующего цветового оттенка в порядке, используемом функцией загрузки палитры: красный, зеленый, синий. Палитра PCX в 256-цветном режиме часто не совпадает с используемой по умолчанию палитрой VGA, что создает дополнительные сложности при просмотре изображений — если кроме картинки вы хотите вывести какой-то поясняющий текст, то он поменяет цвет при смене палитры. Поэтому, несмотря на то, что в файле кодирование 256-цветное, при его создании и последующем просмотре удобнее всего использовать графические режимы TrueColor.

При обмене информацией между программами при помощи РСХ- файлов возможны ситуации трех основных видов:

•      требуется передавать изображение только между своими программами, входящими в один пакет;

•      требуется принять изображение, созданное чужой программой;

•      нужно передать (транспортировать) изображение из своей программы в чужую.

При обмене файлами изображений внутри одного программного пакета никаких особых сложностей нет: можно использовать любую цветовую палитру. Вообще говоря, для транспортировки данных вы даже можете создать на основе принципа RLE свой собственный метод сжатия информации, нестандартный, но оптимальный в вашем конкретном случае.

При приеме файлов из чужих программ приходится либо устанавливать ту палитру, которая приходит вместе с файлом (что приводит к искажению цветов в вашей программе), либо производить перекодировку цветов изображения из чужой палитры в свою (что приводит к искажению изображения), либо работать в режиме ТгаеСо- lor (что связано с проблемами совместимости видеоконтроллеров).

При транспортировке файлов из своего пакета программ в чужой следует учитывать, что многие редакторы изображений корректно работают только с восьмибитовым форматом цветовых компонентов, то есть значение байта признака формата регистров ЦАП должно быть равно OCh, а данные в таблице палитры должны соответствовать этому формату. Например, если нужно передать в MS Photo Editor файл, созданный в стандартном 256-цветном VGA-режиме DOS, то после считывания палитры из регистров ЦАП нужно перед записью таблицы в файл сдвинуть в ней каждый байт данных влево на два разряда.

Если требуется реализовать режим фотографии с 256 градациями серого цвета, то соответствующую таблицу палитры нужно вначале сформировать. Генерация таблицы выполняется по примитивному алгоритму: в первую строку записываются три байта со значением ноль, а в каждой следующей строке значения для всех компонент увеличиваются на 1 (получаем в результате в первой строке черный цвет, а в последней — белый).

Ситуация, когда приходится иметь дело с графическим редактором, работающим только с конкретной палитрой, возникает довольно редко. Однако если такая необходимость есть, то приходится заимствовать таблицу палитры вместе с байтом формата ЦАП. Для этого нужно создать файл (для любого произвольного изображения) в чужом пакете, «взять» из него последние 789 байт и либо записать в виде загружаемого двоичного файла, либо перекодировать в текстовый include-файл. Все изображения, которые вы предназначаете для работы с таким редактором, должны создаваться с использованием заимствованной палитры.

Примеры создания, записи и считывания файлов в форматах BMP и PCX будут рассмотрены в главе 6 «Работа с дисками».

Источник: Кулаков В. К90 Программирование на аппаратном уровне: специальный справочник (+дискета). 2-е издание. — СПб.: Питер, 2003. — 847 е.: ил.

По теме:

  • Комментарии