Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Программа просмотра графических PCX файлов 
:(
    Опции темы
Vit
Дата 22.1.2005, 06:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: 48
Всего: 207



Программа просмотра графических 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


--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0787 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.