Просмотрщик графических файлов. Форматы PCX и BMP

Автор работы: Пользователь скрыл имя, 28 Марта 2011 в 20:11, курсовая работа

Описание работы

Формат PCX стал первым стандартным форматом графических файлов для хранения файлов растровой графики в компьютерах IBM PC. Формат PCX изначально был придуман для хранения черно-белых графических файлов, создаваемых ранней версией программы раскраски PC Paintbrush. На этот формат в начале 80-х гг. фирмой Microsoft была приобретена лицензия, и затем он распространялся вместе с изделиями Microsoft.

Содержание работы

ВВЕДЕНИЕ. 3
1. ФОРМАТЫ ГРАФИЧЕСКИХ ФАЙЛОВ. 4
1.1. Общие принципы строения графических файлов. 4
1.2. Описание и структура файла формата PCX. 4
1.3. Описание и структура файла формата BMP. 6
2. ОПИСАНИЕ ПРОГРАММЫ. 9
2.1. Реализация алгоритма просмотра файла PCX. 9
2.2. Реализация алгоритма просмотра файла BMP. 9
2.3. Используемые переменные и функции. 9
2.3.1. Глобальные переменные. 9
1.3.2. Основные функции и процедуры 10
2.4. Запуск программы 11
2.5. Содержание дистрибутивной дискеты 11
СПИСОК ЛИТЕРАТУРЫ 12
ПРИЛОЖЕНИЕ 13
Листинг программы “Просмотрщик графических файлов”. 13

Файлы: 1 файл

Просмотрщик.doc

— 135.50 Кб (Скачать файл)
 

     1. Первые 14 байтов BMP-файла составляют  его заголовок. Заголовок файла  содержит три значения: буквы  BM, которые говорят о том, что  графический файл имеет BMP формат, число, означающее размер файла и число, указывающее на то, где находятся растровые данные. Последнее число равно количеству байтов от начала файла. Еще два поля в заголовке файла зарезервированы для будущих нужд и обычно содержат нули.

     2. Необходимые неграфические данные упрятаны в информационном заголовке. Поля в информационном заголовке в числе прочих содержат его размер (40 байтов в BMP-файлах для Windows), высоту и ширину изображения в пикселах, и количество битов на пиксел. В зависимости от способа кодирования поле бит на пиксел, может принимать значения:

     1 - битовый образ монохромный, и  таблица цветов должна содержать  два элемента. Каждый бит в  массиве данных кодирует один  пиксел. Если значение бита - 0, то  пиксел становится первым цветом  таблицы; если - 1, пиксел становится вторым цветом таблицы.

     4 - битовый образ имеет максимум 16 цветов, и таблица цветов имеет  до 16 элементов. Цвет каждого пиксела  определяется по таблице цветов  при помощи четырехбитного индекса.  Например, если первый байт данных  имеет значение 3Ah, то при отображении битового образа цвет первого пиксела определяет четвертый элемент таблицы цветов, а цвет второго - одиннадцатый.

     8 - битовый образ имеет максимум 256 цветов, и таблица цветов имеет  до 256 элементов. Каждый байт массива  данных определяет цвет одного пиксела.

     24 - битовый образ имеет максимум 2 в 24-й степени цветов. Таблица  цветов пуста, а цвет пикселов  определяется пакетами из трех  байтов, описывающими цветовые интенсивности  красного, зеленого и голубого  цветов.

     3. Цветовая таблица содержит 256 полей по 4 байта. первый байт в каждом поле отвечает за синюю компоненту цвета, второй за зеленую и третий - за красную. Четвертый байт не используется и обычно устанавливается в 0. Если первые три значения в цветовой таблице 0, 192 и 192, это значит, что нулевой номер соответствует желтому цвету средней интенсивности (смесь зеленого и красного). В цветовой таблице определены все цвета, использующиеся в изображении.

     4. Остальная часть файла содержит  значения пикселов. Последовательность  байтов соответствует порядку пикселов в изображении: слева направо, начиная с нижней строки изображения. Значение каждого байта есть номер цвета в цветовой таблице. Формат собственно данных растрового массива в файле BMP зависит от числа бит, используемых для кодирования данных о цвете каждого пиксела. При 256-цветном изображении каждый пиксел в той части файла, где содержатся собственно данные растрового массива, описывается одним байтом (8 бит). Это описание пиксела не представляет значений цветов RGB, а служит указателем для входа в таблицу цветов файла. Таким образом, если в качестве первого значения цвета RGB в таблице цветов файла BMP хранится R/G/B=255/0/0, то значению пиксела 0 в растровом массиве будет поставлен в соответствие ярко-красный цвет. Значения пикселов хранятся в порядке их расположения слева направо, начиная (как правило) с нижней строки изображения. Таким образом, в 256-цветном BMP-файле первый байт данных растрового массива представляет собой индекс для цвета пиксела, находящегося в нижнем левом углу изображения; второй байт представляет индекс для цвета соседнего справа пиксела и т. д. Если число байт в каждой строке нечетно, то к каждой строке добавляется дополнительный байт, чтобы выровнять данные растрового массива по 16-бит границам.

     Не  все файлы BMP имеют структуру, подобную показанной на схеме. Например, файлы BMP с глубиной 16 и 24 бит/пиксел не имеют  таблиц цветов; в этих файлах значения пикселов растрового массива непосредственно  характеризуют значения цветов RGB. Также  могут различаться внутренние форматы хранения отдельных разделов файла. Например, информация растрового массива в некоторых 16 и 256-цветных BMP-файлах может сжиматься посредством алгоритма RLE, который заменяет последовательности идентичных пикселов изображения на лексемы, определяющие число пикселов в последовательности и их цвет. В Windows допускается работа с BMP-файлами стиля OS/2, в которых используются различные форматы информационного заголовка растрового массива и таблицы цветов.

 

2. Описание  программы.

     После запуска программы PCX_BMP.EXE <имя графического файла> стандартная функция Fnsplit разбивает полное имя файла на 4 части. Что дает возможность передать файлы с расширениями PCX и BMP на обработку функциям вывода графических файлов на экран (show_pcx и show_bmp).

2.1. Реализация алгоритма  просмотра файла  PCX.

     Вывод на экран картинки, хранящейся в  PCX-файле, начинается с чтения заголовка файла. С помощью этого определяется является ли этой файл форматом PCX (manufacturer должен быть равен 10), размеры изображения, информации о палитре, число цветовых слоев. После чего происходит переход на 768 байт с конца файла для чтения набора цветовой палитры и с помощью функции Set_palette заполнение цветовой палитры значениями.

     Теперь  начинается декодирование первой строки развертки - прочитывается первый байт данных из файла. Если два старших бита этого байта равны 1, оставшиеся шесть битов показывают сколько раз следует повторить следующий байт из файла. Если это не так, то этот байт сам является данными с повторителем равным 1. Продолжайте декодирование до конца строки, ведя подсчет количества байтов, переданных в буфер вывода. В конце каждой строки развертки имеет место остановка алгоритма кодирования, но ее не существует при переходе от одного слоя к другому. Как только строка со значениями пикселов прочитана из файла, она в функции put_pixel передается в видео-буфеp для получения изображения на экране.

2.2. Реализация алгоритма  просмотра файла  BMP.

     Вывод на экран картинки, хранящейся в BMP-файле, начинается с чтения заголовка файла и информационного заголовка. Программа таким образом проверяет является ли этот файл графически форматом BMP (сигнатура должна быть ‘BM’) а так же узнает размеры изображения и количество цветов.

     Затем программа читает цветовую таблицу. После чего программа с помощью функции Set_palette заполняет цветовую палитру значениями из цветовой таблицы. Таким образом, обеспечивается правильная передача цветов картинки. Если компьютер способен отобразить тысячи или миллионы цветов одновременно, то цветовую палитру заполнять не нужно.

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

2.3. Используемые переменные и функции.

2.3.1. Глобальные переменные.

     typedef unsigned char byte

     Объявление  типа. 

     char far *video = (char far *) 0xA0000000L

     Указатель на видеопамять. 

     int MaxX, MaxY

     Максимальное  разрешение экрана. 

     VidMode=0x13

     Гафический  режим 13h.

1.3.2. Основные функции  и процедуры

     struct pcxHeaderType

     Структура заголовка файла PCX. 

     struct bmpHeaderType

     Структура заголовка файла BMP. 

     void set_mode (void)

     Установка графического режима 13h. 

     void set_text (void)

     Установка текстового режимa. 

     void set_palette (int color, byte r, byte g, byte b)

     Установление  цвета в палитре. 

     void put_pixel (int x, int y, byte color)

     Вывод пиксела установленного цвета в  позицию x y. 

     void read_pcx_header (FILE *dataFile, pcxHeaderType &pcxHeader)

     Чтение заголовка pcx файла. 

     int show_pcx (char *name)

     Вывод pcx файла на экран. 

     void read_bmp_header (FILE *dataFile, bmpHeaderType &bmpHeader)

     Чтение заголовка bmp файла. 

     void read_bmp_header (FILE *dataFile, bmpHeaderType &bmpHeader)

     Чтение заголовка bmp файла. 

     int show_bmp (char *name)

     Вывод bmp файла на экран. 

     void main(int argc, char *argv[])

     Читает  имя файла из командной строки, проверяет по расширению к какому типу файлов он относится и вызывает соответствующую функция просмотра.

2.4. Запуск  программы

     Программа является консольным приложением и  функционирует под управлением  операционной системы MS DOS или её эмуляции («Сеанс MS DOS» в Windows’е).

     Запуск  программы производится из окна файлового  менеджера, либо из командной строки, и имеет следующий синтаксис: 

     PCX_BMP.EXE <имя графического файла>[PCX]/[BMP] 

     Примеры:

           PCX_BMP.EXE TEST.PCX

           PCX_BMP.EXE TEST.BMP 

     При запуске программы следует обратить внимание на то, что если не указывать  имя файла то на экран будет  выдана подсказка по формату запуска  программы.

2.5. Содержание дистрибутивной  дискеты

 

     Дискета с дистрибутивом содержит следующие  файлы: 

     В каталоге DEMO находится файл основной запускающей программы PCX_BMP.EXE. 

     В каталоге SOURCE находятся файл PCX_BMP.cpp - исходный текст программы, написанный на языке С++. 

     В каталоге DOC находится файл Viewer.doc - описание алгоритма и работы программы просмотра графических файлов. 

     В каталоге TEST находятся тестовые графические  файлы. 

     TEST.BMP  –  графический файл формата BMP (320x200)

     TEST.PCX  –  графический файл формата PCX (320x200)

     TEST2.BMP  –  графический файл формата BMP (224x160)

     TEST2.PCX  –  графический файл формата PCX (256x160)

     TEST3.BMP  –  графический файл формата BMP (320x22)

     TEST3.PCX  –  графический файл формата PCX (200x125) 

     В корневом каталоге дискеты находится файл Read.me.

 

СПИСОК  ЛИТЕРАТУРЫ

 
  1. Д.С. Ватолин "Алгоритмы сжатия изображений". Методические материалы к спецкурсу  ВМиК МГУ "Машинная графика-2" под  руководством Ю.М. Баяковского.
  2. Справочное руководство по IBM PC. Часть 1. Москва ТПП “Сфера” 1991 стр. 55-62
  3. http://home.novgorod.ru/lab/index.php3?path=formtfil/n-q
  4. http://fileformat.virtualave.net/ind_form.htm
  5. http://www.codenet.ru/progr/formt/intro.php
  6. http://vnews.uka.ru/html/school.htm
  7. http://www.halyava.ru/document/ext_b.htm
  8. http://members.nbci.com/treestation/
  9. http://graphics.cs.msu.su/
  10. http://www.programmersheaven.com/zone10/index.htm
  11. http://www.dcs.ed.ac.uk/home/mxr/gfx/utils-hi.html
  12. http://rtfm.vn.ua/
  13. http://www2.crosswinds.net/~hellerzone/manuals.html
  14. http://www.math.rsu.ru/dictionary/fileform.htm

 

ПРИЛОЖЕНИЕ

Листинг программы “Просмотрщик графических файлов”.

     #include <dos.h>

     #include <iostream.h>

     #include <conio.h>

     #include <stdio.h>

     #include <string.h>

     #include <dir.h> 

     // Глобальные переменные

     typedef unsigned char byte;                               // объявление типа

     char far *video = (char far *) 0xA0000000L;   // указатель  на видеопамять

     int MaxX=320, MaxY=200, VidMode=0x13;  // Максимальное  разрешение экрана 

     // Структура заголовка файла PCX

     struct pcxHeaderType

        {

        char manufacturer;      // всегда 10 для Paintbrush

        char version;           // информация о версии (версия 5)

        char encoding;          // групповое кодирование (=1)

        char bitsPerPixel;      // число  бит на пиксел

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

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

Информация о работе Просмотрщик графических файлов. Форматы PCX и BMP