
- •Растровые файлы
- •Идентификатор файла
- •Неиспользуемое пространство
- •Пример 1: Заголовок формата Microsoft Windows Bitmap, версия 1.Х
- •Пример 2: Заголовок формата Sun Raster
- •Пример 3: Заголовок формата Kofax Raster
- •Оптимизация чтения заголовка
- •Организация данных в виде плоскостей
- •Фрагменты
- •Палитра
Фрагменты
Третьим способом организации растровых данных является их фрагментация. Фрагменты подобны полосам, но каждый фрагмент соответствует прямоугольной области изображения. В отличие от полос, которые всегда имеют ту же ширину, что и изображение, фрагменты могут иметь любую ширину — от одного пикселя до ширины всего изображения. В определенном смысле можно считать, что непрерывные изображения представляют собой один большой фрагмент. Однако на практике фрагменты организованы таким образом, что пиксельные данные, соответствующие одному фрагменту, имеют объем от 4 до 64 Кб, а их высота и ширина кратны 16. Это позволяет повысить эффективность буферизации и декодирования данных изображения.
Если данные изображения организованы в виде фрагментов, то обычно все они имеют одинаковый размер, фрагментируется все изображение, фрагменты не перекрываются и сжимаются с применением одной схемы. Единственным исключением является формат CALS Raster Туре II, позволяющий объединить сжатые и несжатые фрагменты изображения. Как правило, фрагменты не компрессируются, если это может привести к увеличению объема их данных (отрицательное сжатие) или требует неразумных временных затрат.
Кроме того, фрагментация данных позволяет оптимизировать степень сжатия путем применения к разным частям изображения различных схем сжатия. Например, одна часть изображения (наиболее загруженная) разделяется на фрагменты, сжимаемые с применением схемы JPEG, а другая часть того же изображения (состоящая только из одного или двух цветов) может быть сохранена в виде фрагментов, закодированных по алгоритму группового кодирования. В этом случае указанные фрагменты изображения будут иметь разный размер, причем наименьший из них может состоять всего из нескольких пикселей, а наибольший — из сотен или даже тысяч пикселей.
Иногда фрагментация позволяет декодировать и распаковывать большие изображения быстрее, чем если бы их пиксельные данные были организованы в виде строк или полос. Поскольку фрагменты можно раскодировать независимо друг от друга, файловые форматы, позволяющие применять фрагменты, содержат в заголовке файла сведения о количестве фрагментов, их размере и смещении. Используя эту информацию, программа, которая должна отобразить, например, правый нижний угол очень большого изображения, может прочесть только те фрагменты, которые описывают нужную область, пропустив остальные.
Схемы сжатия, ориентированные на применение данного способа организации данных, естественно, лучше работают с файловыми форматами, поддерживающими фрагментацию. Наверное, поэтому в последние версии файлового формата TIFF включена схема сжатия JPEG.
Палитра
Большинство форматов растровых файлов содержат цветовую палитру. Информация о палитрах приведена в главе 2.
Концовка
Концовка, иногда называемая хвостом, представляет собой структуру данных, которая часто дополняет основной заголовок, но располагается в конце файла. Обычно концовку добавляют в тех случаях, когда файловый формат модифицировался (в него были включены новые типы данных), а расширить или изменить структуру заголовка невозможно. Как правило, концовка добавляется для того, чтобы сохранить совместимость формата с его предыдущими версиями. Например, последняя модификация формата TGA содержала концовку, и это позволило программам различать версии этого формата и получать доступ к специальным свойствам, имеющимся только в его последних версиях.
Название этого элемента структуры однозначно указывает на то, что он располагается после данных изображения переменной длины. Следовательно, концовка никогда не имеет постоянного смещения от начала файла (исключая изображения неизменного размера). Поэтому смещение концовки, как правило, задается относительно конца файла. Подобно заголовкам, концовки обычно имеют постоянную длину. Смещение концовки может быть указано в информации заголовка при условии, что в нем есть свободное пространство. Концовка, как и заголовок, может содержать поле идентификатора или магическое число, используемое программой визуализации для того, чтобы отличить ее от других структурных элементов растрового файла.
Дополнительные структуры данных растрового файла
Кроме заголовков, концовок и палитр, растровые файлы могут содержать дополнительные структуры данных, используемые программой визуализации при различных манипуляциях с данными изображения.
Файловый формат, позволяющий включать в файл несколько изображений, нуждается в некотором методе идентификации начала каждого изображения. Для хранения смещений начала каждого изображения от начала файла может быть использована таблица смещений изображений, иногда называемая индексом изображений в файле или таблицей страниц.
Таблица строк развертки предназначена для задания начала каждой строки развертки пиксельных данных. Это удобно, если данные изображения сжаты и пиксельные данные, соответствующие отдельным строкам развертки, должны считываться в произвольном порядке; пиксели такого изображения не могут быть упорядочены до тех пор, пока данные изображения не будут декодированы. Таблицы строк развертки содержат по одному элементу для каждой строки развертки изображения. Вариантами этой таблицы можно назвать таблицы расположения полос (один элемент на группу строк развертки) и таблицы расположения фрагментов (один элемент на каждую прямоугольную подобласть изображения).
Другие свойства растровых файлов
Некоторые форматы могут включать уникальные структурные элементы, которые позволяют реализовывать специфические цели каждого формата или способствуют его максимальной универсальности.
Широко известным файловым форматом, который ассоциируется со словом "необычный", является TIFF. Этот формат содержит элементарный заголовок, но позволяет сохранять множество данных в сериях тегов, называемых Image File Directories (директориями файла) и не имеющих ни фиксированного размера, ни фиксированных позиций. Это очень напоминает структуру данных, организованных в памяти в виде списка и связанных между собой смещениями. Найти их можно только по смещению относительно текущей позиции. На первых порах такая организация данных приводила пользователей в замешательство, из-за чего TIFF довольно долго назывался форматом "только для записи". Однако нельзя не признать, что она позволяет программисту создать структуру данных, которая может содержать любую необходимую информацию и расширить область применения формата.
Среди необычных или уникальных особенностей других форматов можно назвать возможность хранить данные изображения и информацию о палитрах в раздельных файлах (например, в файлах форматов Dr. Halo CUT и PAL), a монохромные растры — в виде блоков нулей и единиц в формате ASCII (как в формате РВМ). Такие форматы сконструированы, вероятно, с учетом межплатформной переносимости.
Преимущества и недостатки форматов растровых файлов
Растровые файлы специально предназначены для хранения реальных изображений. Сложные изображения, полученные со сканирующего, фотографического или видеооборудования, могут быть сохранены в растровом формате.
К преимуществам растровых файлов можно отнести следующее:
-
Растровые файлы могут быть легко созданы из существующих пиксельных данных, записанных в памяти в виде массива.
-
Воспроизведение пиксельных данных, сохраненных в растровом файле, может осуществляться в некой системе координат, позволяющей представить эти данные в виде сетки.
-
Пиксельные значения могут изменяться индивидуально либо большими группами с помощью палитры. Растровые файлы легко преобразовываются для передачи на точечные устройства вывода, такие как дисплеи на базе электронно-лучевой трубки и принтеры.
Однако растровые файлы не лишены недостатков:
-
Они имеют очень большой размер, особенно если изображение многоцветное. Применение различных схем сжатия уменьшает размер пиксельных данных, но необходимость распаковки перед использованием значительно замедляет процесс чтения и визуализации изображения. При этом, чем сложнее растровое изображение (большое количество цветов и мелких деталей), тем меньше эффективность процесса сжатия.
-
Растровые форматы плохо поддаются масштабированию. Сжатие изображения децимацией (отбрасыванием каждого десятого пикселя) может изменить его неприемлемым образом, равно как и увеличение изображения копированием пикселей. Поэтому растровые файлы при печати обычно не масштабируются.