Смекни!
smekni.com

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

АСТРАХАНСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ

УНИВЕРСИТЕТ

РОСКОМРЫБОЛОВСТВА

Институт информационных технологий и коммуникаций

Кафедра

Информационных

систем

КУРСОВАЯ РАБОТА

по дисциплине «Основы алгоритмического языка C++»

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

Выполнил:

студентгруппы ЗИУ–31

Андросов О.В.

98 ИУ-022

Проверил:

доцент Миронов Б.Н.

Рецензент:

доцент Лаптев В.В.

Астрахань, 2001 год

Содержание

Введение.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

Введение.

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

Расширение в имени файла говорит о том, в каком формате хранится информация. Например, расширение BMP обозначает BMP-файл, поддерживаемый в системах Windows и OS/2 (BMP - сокращение от bitmap, т.е. битовый, растровый). Формат файла BMP - это "родной" формат растровой графики для Windows, поскольку он наиболее близко соответствует внутреннему формату Windows, в котором эта система хранит свои растровые массивы.

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

1. Форматы графических файлов.

1.1. Общие принципы строения графических файлов.

Что содержит растровый графический файл? Такой файл обычно содержит информацию двух видов: графическую и неграфическую. В графических данных указываются цвета пикселов, неграфические данные содержат другую информацию, необходимую для восстановления изображения, например его высоту и ширину. (Если изображение содержит 1 миллион пикселов, то как графической программе узнать размеры: рисовать ли ей изображение 500 на 2000 или 1000 на 1000 пикселов?) Неграфическая часть файла может также включать другую информацию, такую как номер версии или сведения об авторских правах. Все зависит от формата и от того кто (или какой программный пакет) создал этот файл.

В растровых файлах используется обычно один из двух методов хранения данных о пикселах. В полноцветных изображениях пиксел может принимать любое из более, чем 16 миллионов значений, поэтому и цвет пиксела хранится обычно как 24-разрядное значение - по 8 битов на красную, зеленую и синюю компоненты цвета. Если изображение содержит 1 миллион пикселов, то размер файла будет равен 3 миллионам байтов плюс длина неграфических данных. Если же изображение ограничено 256 или менее цветами, то цветовая информация обычно кодируется с использованием палитры. Вместо того, чтобы хранить значение цвета пиксела, информация о пикселе указывает на строку в палитре, а она, в свою очередь, содержит цвет. С уменьшением количества битов, требуемых для представления цвета пиксела, уменьшается размер файла (а это во все времена ценное приобретение, поскольку пространство памяти не бывает бесплатным).

В качестве примера возьмем изображение из миллиона пикселов, содержащее 256 различных цветов. Кодирование цвета каждого пиксела 24-битным значением пpиводит к расточительной избыточности, потому что некоторые (а возможно и все) из 256-ти цветов повторяются неоднократно. Для хранения используемых цветов лучше выделить в файле 768 байтов под цветовую палитру: 256 полей по 24 бита, каждое поле содержит один из цветов, встречающихся в изображении. Тогда под значение цвета пиксела можно отвести 8 битов, то есть целое число в диапазоне от 0 до 255, указывающее номер цвета в палитре. теперь для графической части файла достаточно 1.000.768 байтов, против прежних 3.000.000 байтов, которые требуются для хранения этого изображения без использования палитры. И даже с учетом дополнительных байтов из неграфической части файла, мы все-таки получаем уменьшение размера файла почти на две трети.

В большинстве форматов графических файлов пикселы располагаются построчно. Если размеры изображения 1000 на 1000 пикселов, и каждый пиксел представляется 8-ю битами, то первые 1000 байтов графической части файла содержат цвета пикселов из верхней строки изображения (слева направо), следующие 1000 байтов содержат цвета пикселов второй строки и так далее. Однако, в некоторых форматах используется иной порядок строк. Например, BMP-файлы начинаются с нижней строки и заканчиваются верхней строкой изображения. В каждом формате графические и неграфические данные структурируются по своему.

1.2. Описание и структура файла формата PCX.

Файлы PCX разделены на следующие три части: заголовок PCX, данные растрового массива и факультативная таблица цветов. 128-байт заголовок PCX содержит несколько полей, в том числе поля размера изображения и числа бит для кодирования информации о цвете каждого пиксела. Информация растрового массива сжимается с использованием простого метода сжатия RLE; факультативная таблица цветов в конце файла содержит 256 значений цветов RGB, определяющих цвета изображения. Формат PCX первоначально был разработан для адаптеров CGA- и EGA-дисплеев и в дальнейшем был модифицирован для использования в адаптерах VGA и адаптерах истинных цветов. Кодирование цвета каждого пиксела в современных изображениях PCX может производиться с глубиной 1, 4, 8 или 24 бит.

Заголовок файла PCX (128 байт)

  1. Сигнатура файла PCX (1 байт) - Постоянный флаг 10 - ZSoft .PCX
  2. Версия. (1 байт) - (0 - Версия 2.5, 2 - Версия 2.8 с информацией о палитре, 3 - Версия 2.8 без информации о палитре, 5 - Версия 3.0).
  3. Кодирование. (1 байт) - (1 - кодирование длинными сериями).
  4. Бит/пиксел (1 байт) - Число бит на пиксел в слое.
  5. Xmin (2 байт) – угловые координаты изображения.
  6. Ymin (2 байт) - угловые координаты изображения.
  7. Xmax (2 байт) - угловые координаты изображения.
  8. Ymax (2 байт) - угловые координаты изображения.
  9. Горизонтальное разрешение создающего устройства (2 байт).
  10. Вертикальное разрешение создающего устройства (2 байт).
  11. Набор цветовой палитры (48 байт).
  12. Не используется (1 байт). Зарезервировано.
  13. Число цветовых слоев (1 байт).
  14. Число байт на строку в цветовом слое (2 байт).
  15. Информация о палитре (2 байт) – (1 = цветная/черно-белая, 2 = градации серого).
  16. Не используется (58 байт). Заполняется нулями до конца заголовка.

Набор цветовой палитры.

Информация палитры хранится в одном из четырех форматов. Для режимов CGA, используется только первый и четвертый байт палитры заголовка. Первый байт обозначает цвет заднего фона - разделив его на 16 получим величину от 0 до 15. Четвертый байт обозначает цвет переднего фона. Число палитр CGA равно 8, поэтому разделим на 32 чтобы получить величину в пределах от 0 до 7.

Для режимов EGA, данные хранятся в 16 "тройках". Тройка - это 3-байтовый набор величин красного, зеленого и голубого цветов. Так как каждая величина может находиться в диапазоне от 0 до 255, Вы должны отобразить эти величины в одном из четырех возможных уров­ней для каждого цвета. Следовательно, 256 разделить на 4 будет 64, поэтому с 0 до 63 = уровень 0, с 64 до 127 = уровень 1, и так да­лее. Система BIOS адаптера EGA ожидает один байт формата 00RGBrgb для кажого регистра палитры. Четыремя возможными величинами для Bb являются 00, 01, 10 и 11. Когда Вы определили уровень для каждого цвета, скомбинируйте их в байте, совместимом с BIOS (Базовой систе­мой ввода-вывода).

Для 16-цветных режимов VGA, палитра снова хранится в "трой­ках". Для преобразования в совместимый формат BIOS, сдвиньте каждый байт вправо на два бита. Это преобразование автоматически выполня­ется функцией pcxGetFilePalette или функцией pcxDecodePalette.

И последний формат поддерживает 256-цветный режим VGA. Так как каждый цвет требует тройку RGB (R (red)- Красный, G (green) - зеле­ный, B (blue) - голубой), для хранения всей палитры VGA будет необ­ходимо 768 байт. Формат PCX, однако, может поддерживать только 16 цветов как максимум, поэтому палитра не может храниться в заголовке изображения по своему обычному адресу.

Формат 256-цветной палитры претерпел мало изменений с тех пор, когда были впервые созданы 256-цветные режимы. Заголовок PCX был изначально создан для хранения 16 цветов как максимум, и длина его составляет всего 128 байт. Для 256-цветной палитры требуется 768 байт (3 умножить на 256) - очевидно, что надо внести изменение. 256-цветная палитра форматируется и интерпретируется точно также, как 16-цветная, естественно, за исключением того, что она длиннее. Палитра (число цветов x 3 байта длины) добавляется в конец PCX файла и ей предшествует байт с десятичным значением 12. Для определения палитры VGA BIOS вам достаточно разделить прочитанные значения цветов на 4.