Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АрхитектураБиологияГеографияДругоеИностранные языки
ИнформатикаИсторияКультураЛитератураМатематика
МедицинаМеханикаОбразованиеОхрана трудаПедагогика
ПолитикаПравоПрограммированиеПсихологияРелигия
СоциологияСпортСтроительствоФизикаФилософия
ФинансыХимияЭкологияЭкономикаЭлектроника

Листинг 5.9. Структура заголовка PCX-файла.

Листинг 4.7. Вращение объекта. | Листинг 4.8. Программа, которая рисует поле астероидов (FIELD.С). | Листинг 4.9. Определение и умножение двух матриц. | Листинг 4.11. Супер Астероиды (FIELD.C). | СЕКРЕТЫ VGA-КАРТ | Листинг 5.3. Создание новой цветовой палитры. | Листинг 5.4. Рисование точки в позиции (х,у). | Листинг 5.5. Программа быстрого рисования точки. | Листинг 5.6. Рисование горизонтальной линии. | Листинг 5.7. Рисование вертикальной линии. |


Читайте также:
  1. II. ДОБРОВОЛЬНАЯ НАРОДНАЯ ДРУЖИНА И ЕЕ СТРУКТУРА
  2. II.Структура характера
  3. IV. Структура психодиагностического процесса.
  4. V3: Функциональная структура психодиагностического обследования
  5. Адміністративно-правові норми: поняття, особливості, структура, види.
  6. Активным детям требуется подготовка и структура
  7. Бендлер Р., Гриндер Д. Структура магии / Пер. АО «Альвис» СПб.: Белый кролик, 1996.

typedef struct pcx_header_typ

{

char manufacturer; // всегда 10

char version; // 0 - версия 2.5 Paintbrush

// 2 - версия 2.8 с палитрой

// 3 - версия 2.8 без палитры

// 5 - версия 3.0 или старше

char encoding; // всегда 1 - RLE кодирование

char bits_per_pixel;// количество бит на пиксель

// для нашего случая – 8

int x,y; // координаты верхнего левого угла изображения

int width,height; // размеры изображения

int horz_res; // количество пикселей по горизонтали

int vert_res; // количество пикселей по вертикали

char ega_palette[48]; // EGA-палитра. Ее можно игнорировать,

char reserved; // ничего значимого

char num_color_planes; // количество цветовых плоскостей

//в изображении

int bytes_per_line; // количество байт на одну строку

int palette_type; // не беспокойтесь об этом

char padding[58]; // ссылка на палитру в конце файла

} pcx_header, *pcx_header_ptr;

 

Последнюю часть PCX-файла также довольно легко обработать:

§ Необходимо установить указатель на конец файла;

§ Передвинуться вверх на 768 байт;

§ Прочитать 768 байт как палитру.

Конечно, я упустил кое-какие детали обработки PCX-файла, но сделал это лишь для того, чтобы лучше передать смысл производимых действий. Сейчас же нас больше должен занимать способ декодирования средней части, где находится само изображение. Именно отсюда начинаются сложности, поскольку процедура декомпрессии не очень проста и очевидна.

§ Если код прочитанного байта принадлежит множеству 192...255, то мы вычитаем из него 192 и используем полученный результат, как количество повторений следующего байта;

§ Если код прочитанного байта лежит в диапазоне от 0 до 191, то мы используем его как байт данных, то есть помещаем его в битовую карту без изменений.

Если вы достаточно внимательны, то можете спросить: «А как же быть с пикселями, имеющими значения от 192 до 255? Интерпретируются ли они как RLE-цепочки?» Да, и гениальное решение этого вопроса состоит в том, что такие значения кодируются не одним, а двумя байтами. Например, если требуется поместить в файл значение 200, то сначала нужно записать число 193 (192-1) как количество повторений, а потом — 200. Посмотрим на рисунок 5.8, чтобы увидеть пример декомпрессии.

Теперь настало время написать программу, реализующую чтение файл формата PCX. Она получилась весьма неплохой. Листинг 5.10 даст вам возможность убедиться в этом самостоятельно.


Дата добавления: 2015-07-12; просмотров: 111 | Нарушение авторских прав


<== предыдущая страница | следующая страница ==>
Листинг 5.8. Создание и отображение цветовой палитры (PALDEMO.C).| Листинг 5.10. Программа чтения файла формата PCX.

mybiblioteka.su - 2015-2024 год. (0.007 сек.)