Продолжение. Начало в № 17/99, 18/99
l
l l 2. Все познается в сравнении. Вечер второйВова сидел у меня на кухне и уплетал печенье "Юбилейное", запивая его чаем. Я расположился напротив с ноутбуком в руках. Мальчик с любопытством наблюдал за моими действиями. Его очень расстраивало, что ему не видно экрана, Я подсел к Вове поближе.
— Вчера мы обсуждали с тобой самый простой формат —
BMP.Вова понимающе кивнул головой.
— А теперь давай составим таблицу, в которой будем фиксировать наиболее важные сведения о форматах;
формат | BMP | PCX | GIF |
Число бит/пиксель | 24 | ||
Макс. число цветов, млн | 16,7 | ||
Размер изображения в пикселях | 65 535х65 535 |
— Мы с тобой знаем, что каждая точка рисунка может кодироваться 24 битами.
— Это если
true color! — уточнил Вова.— Да. А если черно-белое изображение, то...
— Один бит, — подхватил прилежный ученик.
— Поэтому в графу таблички "Число бит на пиксель" пишем 24 бита. Ты уже подсчитал, сколько цветов может быть в изображении — 224. А теперь заполним поле "Размер изображения". Так как изображение состоит из пикселей, то и размер измеряется в пикселях (точках). Максимальный размер рисунка в BMP-файле - (216-l)x(216-l).
Задача 2.1. Почему размер по горизонтали равен 216-1, а не 216?
Пояснение. Формат графического файла — это не незыблемый монумент, и время накладывает на формат определенный отпечаток. Все сказанное выше верно для PCX-формата, используемого в
Windows 3.1. Однако появление Windows 95 и 98 привнесло в формат некоторые изменения: число бит на точку может достигать 32, а размер изображения с 2-байтного вырос до 31-битного, то есть до 2 Гигабит. Размер также может задаваться отрицательным числом, которое указывает на направление прорисовки изображения: с левого верхнего угла, а не с левого нижнего.— Дядя Саша, а почему остальные клетки таблицы не заполнены? Ты расскажешь про форматы
PCX и GIF?— Конечно, уже начинаю. Формат графических файлов не возникает на пустом месте. Кто-то первый придумывает новый стандарт и предлагает его к использованию. Так, однажды фирма
ZSoft разработала стандарт PCX для использования в программе PC Paintbrush в операционной системе MS-DOS.— Это та, которая была до
Windows ? — спросил Вова.— Да. Программа
Paint на твоем компьютере — это обновленная PC Paintbrush. Но PCX не стал столь популярным форматом, как BMP, поэтому в Windows 98 программа Paint уже не "понимает" этого формата. Но если у тебя сохранились файлы в формате PCX, то можно прочитать их программой Imaging, которая поставляется вместе с Windows 98. Нельзя же бросать то, что уже сделано! Тем не менее PCX был распространен на PC-технике, и многие современные умные программы (специализированные графические редакторы CorelDraw, Ulead PhotoExpress, Adobe PhotoDeluxe) умеют его читать и записывать.— Я работал в
CorelDraw,— заметил ученик.—
PCX — это аппаратно-зависимый формат. Изначально он разрабатывался для определенного типа видеоплат (видеоадаптеров). Чтобы в файле информация хранилась так же, как и в видеоплате.Раньше существовали 16-цветные EGA-адаптеры. Память таких адаптеров делилась на непрерывные куски— плоскости, планы. Составляющие цвета пикселя (как правило, 1 бит) находились в соответствующих местах плоскостей. Для того чтобы поставить точку определенного цвета, требовалось исправить в 4 плоскостях по 1 биту. Получалось, что цветная картинка как бы состояла из 4 наложенных монохромных (не путать с черно-белыми) . Для поддержания совместимости современные видеоадаптеры умеют работать и в таких EGA-режимах.
Представь на минутку, что графический файл — это грузовики, везущие бочки-байты на склад (видеокарту). При поступлении на склад содержимое бочек должно быть разнесено по соответствующим полкам, Это требует определенного времени: открыть бочку, достать какую-то часть, переложить на полку и т.д. А если заранее распределить по бочкам так, чтобы все из бочки выкладывать на одну полку, то это сильно сэкономит время. Это и есть аппаратная зависимость.
— А на сколько полок нужно раскладывать содержимое бочки? — поинтересовался Вова.
— Это был просто пример, поэтому можешь считать, что на 4 или на 2. Теперь вернемся к формату
PCX. Как и в BMP-формате, файл имеет заголовок длиной 128 байт. Возьмем файл с фотографией кукол: DOLLS. BMP размером 1 440 054 байта и преобразуем его в формат PCX. Для этого я воспользуюсь достаточно старой программой iPhoto Plus (у современных графических программ, которые установлены на моем компьютере, не оказалось возможности сохранять файлы в этом формате). А сейчас посмотри на размер файла.— Он равен 1 375 127 байтам, — сообщил Вова.
— К какому выводу можно прийти?
— PCX-формат компактнее, — догадался Вова.
Задача 2.1. Как вы думаете, почему?
— Теперь воспользуемся программой
HEX-viewer и посмотрим, что там внутри. Не забыл, как переводить из шестнадцатеричной системы счисления в десятичную? Сколько будет в десятичной системе 0А шестнадцатеричное?— Десять, — подумав, ответил Вова.
— Правильно, именно с этой десятки и начинается PCX-файл. Код 0А означает, что это PCX-формат. Далее через байт следуют номер версии (05), количество бит на пиксель (в данном файле — 8) и т.д. Но если обнаружишь в начале файла признак ОА, то все равно не надо сразу считать, что это PCX-файл. Надо очень внимательно проанализировать 128-байтный заголовок.
— А теперь составь таблицу, какую мы составляли для BMP-файла, я тебе помогу.
Название | Длина (в байтах) | Содержимое файла DOLLS.PCX | Примечание |
Заголовок файла | |||
Признак PCX | 1 | 0А | |
Номер версии | 1 | 05 | самая последняя |
Метод сжатия | 1 | 01 | упакованы |
Бит/пиксель | 1 | 08 | 8 бит |
Аевая граница | 2 | 0000 | 0 |
Верхняя граница | 2 | 0000 | 0 |
Правая граница | 2 | 03 IF | 799 |
Нижняя граница | 2 | 0257 | 599 |
Горизонтальное разрешение | 2 | 0090 | 144 |
Вертикальное разрешение | 2 | 0090 | 144 |
16-цветная палитра | 48 | 00 00 10 ... | 16- 3= 48 |
Резервный байт | 1 | 00 | |
Количество планов | 1 | 03 | |
Кол-во байт в строке | 2 | 03 20 | 800 |
Тип палитры | 2 | 0001 | цветное изображение |
Ширина экрана | 2 | 0320 | 800 |
Высота экрана | 2 | 0258 | 600 |
Резервные байты | 54 | 00 — 54 раза | |
Изображение |
|||
Растровый массив | переменная | 5955 | здесь хранится само изображение |
Палитра |
|||
Признак палитры | 1 | С0 | иначе 256-цветная |
256-цветная палитра | 768 | палитра отсутствует |
— Давай немного ее проанализируем. Появились новые понятия — левая, правая, верхняя, нижняя граница изображения. Дело в том, что PCX-формат допускает хранение в растровом массиве большего изображения, чем картинка, видимая на экране. Левая и верхняя граница задают отступ от верхнего угла изображения, а разница между границами задает размер видимой части.
Это было придумано для использования PCX-формата 6 факсимильных аппаратах.—
Кроме того, ты помнишь, что строки BMP-файла иногда содержали "лишние" байты в конце строки растра?— Да, если число байт в строке нечетно, там добавляется "выравнивающий" байт, — вспомнил Володя.
— Правильно! Заметь, что пиксели, в которых измеряются границы изображения, нумеруются с О, поэтому правая граница — 03 IF. Сколько это будет в десятичной системе счисления?
— Это будет 3 умножить на 256 плюс 16 плюс 15, то есть 799!
— А нижняя граница, соответственно, будет 599. То есть размер изображения — 800 на 600 точек. Есть еще интересный байт в файле, определяющий метод сжатия. Он, как правило, установлен равным 1, что указывает на дополнительную упаковку изображения. Но об этом поговорим в другой раз. Теперь вспомни пример с "бочками". В таблице написано, что в файле DOLLS.PCX используется 8 бит на пиксель. То есть...
— 256 цветов, — подхватил Вова.
— Да, но смотри, что сообщает про этот файл программа PhotoImpact Viewer (программа для просмотра графических файлов различных форматов).
Тип
изображения: |
RGB True color (24
bit) 800 Pixels 600 Pixels 1343 KB DOLLS.PCX PC Paintbrush RLE compression 57 Pixels/cm |
— 24 бита, — сообщил ученик.
— Правильно. А теперь посмотри на строку "Количество планов" в таблице, которую мы составили. Там стоит число 3. Это означает, что информация о точке хранится в трех различных растровых массивах, по 8 бит в каждом, то есть 3 умножить на 8, получишь те же 24 бита на пиксель. При этом в файле DOLLS.PCX растровые данные хранятся по планам в трех растровых массивах, следующих один после другого. А если бы количество планов было равно единице, то...
— В одном массиве, как было в BMP-файле, — подытожил Володя.
— Да, только при true color в PCX-файле всегда 3 плана. А один план бывает при 256-цветном изображении. Именно тогда в конце файла находится палитра. Кроме того, в таблице есть два поля, описывающих разрешение. Для более правильной привязки изображения к экрану: 144 точки на дюйм. А программа PhotoImpact Viewer сообщает, что 57 точек. Как ты думаешь, почему?
Володя задумался на несколько секунд и ответил.
Задача 2.3. Что ответил Володя? — Теперь мы можем заполнить очередные графы нашей таблицы.Формат | BMP | PCX | GIF |
Число бит/пиксель | 24 | 24 | |
Макс. число цветов, млн | 16,7 | 16,7 | |
Размер изображения в пикселях | 65 535 х 65 535 | 65 535 x 65535 |
— Дядя Саша, а будем заполнять последний столбец? — спросил Вова.
— Будем, только пойдем прогуляемся с собаками, уже время подошло, и я продолжу.
Мы взяли на поводки моих собак— таксу и добермана — и пошли гулять.
— Итак, следующий формат...
— GIF, — напомнил Вова.
— GIF — это Graphics Interchange format (дословно — Формат для Обмена Графикой). Этот формат, разработанный фирмой CompuServe, стал одним из самых распространенных форматов для хранения и обмена изображениями, хотя первоначально предназначался для сети CompuServe. Подчас придуманное кем-то для внутренних нужд вполне подходит и для всех. формат GIF устроен не так, как известные тебе PCX и BMP. Говорят, что в GIF графическая информация хранится в виде потока данных. Информация состоит из блоков, которые следуют один за другим. Нельзя сказать, где начинается 17-й блок, пока не прочитан 16-й. Поэтому при чтении файла информация "льется как вода", непрерывным потоком. Понятно?
— Понятно, — подтвердил Вова.
— К недостаткам GIF-файла можно отнести скромное количество цветов в картинке — всего 256 цветов, правда, из палитры. • — A true color? — удивился мальчик.
— Никакого true color, максимум 256 цветов и все. Но есть и достоинства. Один файл может содержать произвольное число изображений. Правда, большинство файлов, которые ты встретишь, содержат всего одну картинку. Различают две версии формата GIF: GIF87a и GIF89a... Но нам пора домой. Пойдем, я дома расскажу дальше.
И мы возвратились с прогулки домой. Собаки шли спокойно — хорошо погуляли. Мы снова сели пить чай.
— Сначала про GIF87a. Версия выпущена в мае 1987 года, как ты, наверное, догадался из названия:
GIF87— 87-й год. Каждый файл состоит из заголовка, необязательной палитры и собственно информации про картинки. Вот все та же картинка DOLLS, уже в GIF-формате.
— А цветов сколько? — спросил Володя.
— Только 256. Теперь смотри внутрь. Начинается с признака GIF-файла и номера версии “'87a”.
— Давай снова составим таблицу.
Название | Длина файла (в байтах) | Содержимое DOLLS.GIF | Примечание |
Заголовок файла |
|||
Признак GIF | 3 | 47 49 46 | GIF |
Номер версии | 3 | 38 37 61 | 87a |
Ширина экрана | 2 | 0320 | 800 |
Высота экрана | 2 | 02 58 | 600 |
Спец. информация | 3 | Р7 00 00 | число цветов и прочее |
Глобальная 256-цветная палитра | 3 • число цветов | 5955 | палитра может отсутствовать |
Изображение № 1 |
|||
Признак картинки | 1 | 2С | |
Координаты картинки: | |||
по оси Х | 2 | 0000 | 0 |
по оси Y | 2 | 0000 | 0 |
Ширина картинки | 2 | 0320 | 800 |
Высота картинки | 2 | 02 58 | 600 |
Спец. информация | 2 | 08 07 | наличие палитр и прочее |
Палитра картинки 256-цветная палитра | 3 • число цветов | палитра может отсутствовать | |
Данные картинки | переменная | ||
Изображение 2 |
|||
..................................................................................................................... |
|||
Завершитель | 1 | 3B | обязателен |
— После заголовка идет палитра, которая используется для всех изображений в файле GIF, если у изображения нет собственной палитры. Если глобальная цветовая палитра отсутствует, то каждое изображение, хранящееся в файле GIF, должно иметь собственную палитру.
— А палитры устроены как в BMP-файлах?
— Да, точно так. Причем и палитры картинок, и глобальная палитра устроены совершенно одинаково: тройки байт, задающие красную, зеленую и синюю составляющие цвета точки. А теперь про данные картинки. Как и у PCX-файла, GIF использует специальный алгоритм сжатия данных, для того чтобы объем дисковой памяти при хранении был поменьше. Я тебе говорил, что мы с тобой поговорим чуть попозже о том, как работают алгоритмы сжатия... Сжатые данные картинки хранятся в виде потока блоков размером не более 255 байт. Каждый блок состоит из байта-длины блока и собственно данных. Когда картинка заканчивается, следует блок нулевой длины.
— А я видел, что GIF-файлы при загрузке из сети Интернет как-то интересно появляются, как будто нечетко сначала, а потом все четче и четче. Почему это? — спросил Володя.
— Хороший вопрос, умница. GIF был задуман для передачи изображений именно по сети. Если ты подключен через модем, то ты наблюдаешь загрузку GIF-файла "вживую". Этот формат "умеет" передавать строки картинки чередующимися: сначала 0, 8, 16, то есть каждая 8-я строка, затем 4, 12, 20 — и снова через 8 строк. Далее со 2-й строки и через 4: 2, б, 10... И последний проход начинается с 1-й строки и через 2: 1, 3, 5... каждая нечетная. Такое изображение, даже "приехав" на 50%, позволяет увидеть всю картинку, хотя, может, и без деталей. Глаз и мозг дополняют картинку сами, хотя получена всего половина изображения.
— А тогда при нечередующихся строках "приедет" только верхняя половина картинки, и мы еще не знаем, что будет внизу картинки, да?
— Молодец! При этом чередующиеся строки на самом деле лежат в этом порядке в файле GIF. Однако это может создать определенные трудности при перекодировании чередующегося GIF-файла в другой формат. Теперь про GIF89a. Эта версия выпущена в июле 1989 года. формат GIF89 очень похож на GIF87. Общая структура файла такая же: заголовок, необязательная палитра и информация про картинки. Однако в новой версии формата появились новые информационные блоки, которые названы управляющим расширением. Такое вот странное название.
— Я запомню,— улыбнулся Вова.
— Их четыре типа: управление графикой, текстом, комментарии и приложения. Эти блоки созданы для управления выводом графики из GIF-файла и для некоторого другого. А теперь подробнее. Управление графикой используется, когда одна картинка GIF-oaeea перекрывает другую (может даже прозрачную), когда предыдущую картинку надо удалить (или восстановить) или подождать, пока человек нажмет на кнопку мыши. Блок текста позволяет накладывать предложения обычного текста поверх изображения. Это особенно удобно, когда нужно поменять текст в GIF-oaeea,
оставив неизменным фоновое изображение. Комментарии просто пропускаются при выводе изображения, но могут быть полезны авторам рисунка, например, содержать информацию об авторе рисунка, дате создания и еще что-нибудь полезное. Приложения хранят специальные данные, которые воспринимаются специальными же программами. Другие программы, показывающие GIF-файл, просто пропускают этот блок.
— А как устроены управляющие расширения?— спросил Володя.
— Давай рассмотрим, как устроен блок текста, снова составим таблицу.
Название | Длина (в байтах) | Содержимое файла | Примечание |
Признак блока | 1 | 21 | |
Признак расширения | 1 | 01 | текст |
Размер блока | 1 | ОС | всегда |
Позиция текста по оси Х | 2 | 00 14 | 20 |
Позиция текста по оси Y | 2 | в пикселях 00 ОА | 10 |
Ширина текста по оси Х | 2 | 00 38 | 56 |
Ширина текста по оси Y | 2 | 00 ОА | в пикселях 10 |
Ширина буквы | 1 | 08 | 8 |
Высота буквы | 1 | ОА | 10 |
Цвет фона | 1 | 07 | из палитры |
Цвет буквы | 1 | 01 | |
Текст | от 1 до 255 | 8F 90 88 82 ... | ПРИВЕТ! |
Признак конца блока | 1 | 00 | всегда |
— Я понял,— сказал Вова, внимательно разглядев таблицу,— этот блок задает текст...
Задача
2.4. Что рассказал Боба? Ответьте подробно.— Теперь мы можем наконец заполнить все графы таблицы:
Формат | BMP | PCX | GIF |
Число бит/ пиксель | 24 | 24 | 8 |
Макс. число цветов, млн | 16,7 | 16,7 | 256 |
Размер изображения в пикселях | 65535 х 65535 | 65535 х 65535 | 65535 х 65535 |
— УФФ! — радостно завершил мальчик, — я знаю про три формата: BMP, PCX и GIF! А поиграть на компьютере можно?
— Садись, Вова, к настольному компьютеру. Выбирай игру, отдохни. А я еще поработаю.
Через пару часов мы распрощались с моим маленьким соседом. Вова был счастлив: и узнал много, и поиграл. Мы договорились скоро встретиться снова.
Продолжение следует