Растровый графический файл обычно содержит информацию двух видов: графическую и неграфическую. В графических данных указываются цвета пикселей, неграфические данные содержат другую информацию, необходимую для восстановления изображения, например, его высоту и ширину. (Если изображение содержит 1 миллион пикселей, то как графической программе узнать размеры: рисовать ли ей изображение 500 на 2000 или 1000 на 1000 пикселей?) Неграфическая часть файла может также включать другую информацию, такую как номер версии или сведения об авторских правах. Все зависит от формата и от того, кто (или какой программный пакет) создал этот файл.
В растровых файлах используется обычно один из двух методов хранения данных о пикселях. В полноцветных изображениях пиксель может принимать любое из более чем 16 миллионов значений, поэтому и цвет пикселя хранится обычно как 24-разрядное значение - по 8 битов на красную, зеленую и синюю компоненты цвета. Если изображение содержит 1 миллион пикселей, то размер файла будет равен 3 миллионам байтов плюс длина неграфических данных. Если же изображение ограничено 256 или менее цветами, то цветовая информация обычно кодируется с использованием палитры. Вместо того чтобы хранить значение цвета пикселя, информация о пикселе указывает на строку в палитре, а она, в свою очередь, содержит цвет. С уменьшением количества битов, требуемых для представления цвета пикселя, уменьшается размер файла (а это во все времена ценное приобретение, поскольку пространство памяти не бывает бесплатным).
В качестве примера возьмем изображение из миллиона пикселей, содержащее 256 различных цветов. Кодирование цвета каждого пикселя 24-битным значением приводит к расточительной избыточности, потому что некоторые (а возможно и все) из 256-ти цветов повторяются неоднократно. Для хранения используемых цветов лучше выделить в файле 768 байтов под цветовую палитру: 256 полей по 24 бита, каждое поле содержит один из цветов, встречающихся в изображении. Тогда под значение цвета пикселя можно отвести 8 битов, то есть целое число в диапазоне от 0 до 255, указывающее номер цвета в палитре. Теперь для графической части файла достаточно 1.000.768 байтов, против прежних 3.000.000 байтов, которые требуются для хранения этого изображения без использования палитры. И даже с учетом дополнительных байтов из неграфической части файла, мы все-таки получаем уменьшение размера файла почти на две трети.
В большинстве форматов графических файлов пиксели располагаются построчно. Если размеры изображения 1000 на 1000 пикселей, и каждый пиксель представляется 8-ю битами, то первые 1000 байтов графической части файла содержат цвета пикселей из верхней строки изображения (слева направо), следующие 1000 байтов содержат цвета пикселей второй строки и так далее. Однако в некоторых форматах используется иной порядок строк. Например, BMP-файлы начинаются с нижней строки и заканчиваются верхней строкой изображения.
Вызывает интерес та часть процесса, где происходит преобразование данных в растровый массив. Существует несколько форматов файлов растровой графики, и каждый формат предусматривает собственный способ кодирования информации о пикселях и другой присущей компьютерным изображениям информации. Именно поэтому программа Paint, поставляемая в комплекте ОС Windows 95, совместима с BMP-файлами, но не может считывать файлы формата GIF. Создатели программы Paint наделили ее способностью декодировать графическую информацию, хранящуюся в формате BMP, но распространенный формат GIF для нее остается таким же чуждым, как язык суахили для среднего техасца.
Так что же находится внутри файла растровой графики и чем отличается один формат от другого? Чтобы ответить на эти вопросы, давайте коротко рассмотрим шесть наиболее популярных в ПК форматов графических файлов. Существуют, разумеется, и другие форматы растровой графики, а также форматы файлов для векторной графики, в которых хранятся команды по воссозданию изображения, а не информация о цвете каждого отдельного пикселя. Однако в повседневной работе, вероятнее всего, вы сталкиваетесь с обсуждаемыми здесь форматами растровой графики.
Формат | Макс. число бит/пиксель | Макс. число цветов | Макс. размер изображения, пиксель | Методы сжатия | Кодирование нескольких изображений |
---|---|---|---|---|---|
BMP | 24 | 16'777'216 | 65535 x 65535 | RLE* | - |
GIF | 8 | 256 | 65'535 x 65535 | LZW | + |
JPEG | 24 | 16'777'216 | 65535 x 65535 | JPEG | - |
PCX | 24 | 16'777'216 | 65535 x 65535 | RLE | - |
PNG | 48 | 281'474'976'710'656 | 2'147'483'647 x 2 147 483 647 | Deflation (вариант LZ77) | - |
TIFF | 24 | 16'777'216 | всего 4'294'967'295 | LZW, RLE и другие* | + |