Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Программа просмотра графических PCX файлов


Автор: Vit 22.1.2005, 06:43
Программа просмотра графических PCX файлов:
----

Для хранения изображений в электронном виде используются различные спобы кодирования и соглашения о способе их записи - графические форматы. Среди них PCX, BMP, GIF, JPEG и другие. Одним из наиболее простых является формат PCX. В данной работе предлагается написать программу, которая выполняет декодирование графического PCX-файла и выводит соответсвущее изображение монитора в видеорежиме 13h VGA.

PCX-файл состоит из заголовка размером 128 байт, секции данных произвольного размера и, возможно, секции параметров палитры размером 768 байт. Секция параметров палитры VGA имеется для PCX-формата версии 5 и старше. 
  Ниже приводится описание формата заголовка. Суммарная длина заголовка - 128 байт.


Код


type ImgInfoHeader = record
   Manufacturer : Byte; {Идентификатор разработчика формата - 10 для Zsoft.pcx}
   Version : Byte; {Версия}
   Encoding : Byte; {Кодировка. Обычно 1}
   BitsPerPixel : Byte; {Число бит на пиксел: 1,2,4,8}
   Xmin, Ymin, Xmax, Ymax : Integer; {Минимальные и максимальные значения X и Y}
   HDPI: Integer; {Горизонтальное разрешение в точках на дюйм}
   VDPI: Integer; {Вертикальное разрешение в точках на дюйм}
   Colormap: array[0..15, 1..3] of Byte; {Цветовая палитра. 16 цветов. Схема RGB}
   Reserved: Byte; {Поле зарезервированно, устанавливается нулевое значение}
   Nplanes: Byte; {Количество цветовых плоскостей}
   BytesPerLine: Integer; {Количество байт на строку. Должно быть четным}
   PaletteInfo : Integer; {1 = цветной рисунок.  2 = рисунок в шкале серого цвета}
   Filler : array[1..58] of Byte; { Нулевые значения}
end;
 



Параметры палитры размещаются в конце файла но их установку лучше производить перед выводом изображения на экран. Предлагается слудующий алгоритм установки цветовой палитры:
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

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)