| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > Программа просмотра графических PCX файлов |
| Автор: Vit 22.1.2005, 06:43 | ||
| Программа просмотра графических PCX файлов: ---- Для хранения изображений в электронном виде используются различные спобы кодирования и соглашения о способе их записи - графические форматы. Среди них PCX, BMP, GIF, JPEG и другие. Одним из наиболее простых является формат PCX. В данной работе предлагается написать программу, которая выполняет декодирование графического PCX-файла и выводит соответсвущее изображение монитора в видеорежиме 13h VGA. PCX-файл состоит из заголовка размером 128 байт, секции данных произвольного размера и, возможно, секции параметров палитры размером 768 байт. Секция параметров палитры VGA имеется для PCX-формата версии 5 и старше. Ниже приводится описание формата заголовка. Суммарная длина заголовка - 128 байт.
Параметры палитры размещаются в конце файла но их установку лучше производить перед выводом изображения на экран. Предлагается слудующий алгоритм установки цветовой палитры: 1)Найти конец файла 2)Отступить на 768 байт назад 3)Считать значения 4)Все считанные значения разделить на 4 5)Произвести установку палитры в VGA-режиме Диапазон значений интенсивности цветов RGB-палитры в VGA-Режиме - 0..63, а значения использующиеся в PCX-файле лежат в диапазоне 0..255. Поэтому и выполняется деление считанныз значение на 4. Декодирование PCX-файла происзодит следующим образом. Первые 128 байт содержат заголовок. Они могут быть пропущены если будут отображаться только 256-цветные файлы с изображением размером 320х200 пикселов. В противном случае из заголовка извлекается необходимая информация. Далее сччитывается байт данных. Декодированный байт данных в 266-цветном режиме представляет собой номер элемента палитры для графической точки. Если старшие 2 бита считанного байта нулевые, данный байт должен быть выведен на экран. Если же они еденичные, 6 младших битов байта содержат значение, указывающее сколько раз следующий байт должен быть отображен на экране. Для определения числа повторений цикла к считанному значению и числу 63 применяется операция "логическое 6": temp:=значение считанного байта данных; for loop :=1 to (temp AND 63) do . . . Затем считывается очередной байт данных и все повторяется до тех пор пока изображение не будет выведено на экран полностью :rolleyes |