Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
62
Добавлен:
02.05.2014
Размер:
127.49 Кб
Скачать

Идентификатор файла

Обычно заголовок начинается с определенного уникального идентифицирующего значения, называемого идентификатор формата файла, файловый ID или ID-значение. Идентификатор позволяет программе определить формат графического файла, с которым она работает.

Идентификаторы форматов часто называют магическими числами, подразумевая под этим, что они выбирались разработчиком формата произвольно. В качестве идентификатора может использоваться последовательность символов ASCII (например, ВМ или GIF), либо двух- или четырехбайтовое слово (например, 4242h или 596aa695h), либо произвольная последовательность данных, понятная только разработчику формата. Предполагается, что идентификатор должен быть уникальным даже для форматов, используемых на различных платформах, но, как вы увидите дальше, это условие далеко не всегда соблюдается. Как правило, если значение, прочитанное из определенного места в файле, совпадает с ожидаемым идентификационным значением, то программа, читающая заголовок файла, предполагает, что ей известен данный формат.

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

Второе обстоятельство заключается в том, что при создании нового формата его автор может нечаянно полностью или частично воспроизвести магические значения другого формата. Хотя такое совпадение и кажется невероятным, это все же иногда происходит. Известен случай, когда программисты, заимствуя идеи с других платформ, были уверены в том, что их усилия защищены "китайской стеной" архитектурной несовместимости. Очевидно, что подобное наивное предположение разработчиков — не более чем недостаток квалификации. Раньше проблемы с форматами, имеющими похожие идентификационные поля, возникали крайне редко и разрешались в основном путем анализа контекста. Можно ожидать, что в будущем таких проблем у пользователей прибавится вследствие более широкого применения локальных, региональных и глобальных сетей, которые позволяют получать доступ к данным, созданным на других платформах.

Третье обстоятельство проявляется в тех случаях, когда распространитель формата (не обязательно разработчик) умышленно или случайно изменяет его спецификацию, сохраняя при этом идентификатор, определенный документацией данного формата. В этом случае программа распознает формат, но не всегда может прочесть его данные. Если распространитель сделал это умышленно, то изменения не документировались. К сожалению, специалисты уже не раз сталкивались с некорректно документированными изменениями форматов. Так было, например, с файловыми форматами GIF, TIFF и TGA. Распространители форматов GIF и TGA, которые не всегда являются разработчиками, расширяют или изменяют их для того, чтобы включить в них новые типы данных. В формат TIFF были внесены таким образом изменения, названные "удобными обновлениями", предназначенные, по-видимому, специально для того, чтобы вызывать ошибки кодирования и случайные сбои прикладных программ.

Версия файла

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

Информация, описывающая изображение

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

Количество битов на пиксель определяет размер данных, необходимых для описания каждого пикселя в цветовой плоскости. Иногда в этом поле в действительности сохраняется информация о количестве байтов на пиксель. Это поле характеризует пиксельную глубину. Наиболее распространенной ошибкой при разработке программ чтения форматов является неправильная интерпретация программистами значения этого поля. Если растровые данные были записаны в виде последовательности плоскостей, то поле количество цветовых плоскостей определяет количество используемых цветовых плоскостей. Чаще всего его значение равно единице, что свидетельствует о тенденции сохранения растров в одноплоскостном формате. В то же время многоплоскостные форматы продолжают применяться для поддержки специального оборудования и альтернативных цветовых моделей.

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

Тип сжатия

Если с целью уменьшения объема файла формат поддерживает какой-нибудь вид кодирования, то в заголовок должно быть включено поле тип сжатия (тип компрессии). Некоторые форматы поддерживают несколько алгоритмов компрессии, включая необработанные и несжатые данные. Часто модификации форматов — это главным образом дополненные или измененные уже используемые схемы сжатия. Проблема сжатия данных постоянно привлекает внимание разработчиков, поэтому достаточно часто появляются новые, более совершенные алгоритмы компрессии.

Координаты изображения

Поля х-координата начала изображения и у-координата начала изображения определяют координаты точки начала изображения на устройстве вывода. Чаще всего они имеют значения (0, 0), что позволяет совмещать начало изображения с точкой отсчета системы координат устройства. Если же применяются другие координаты, то при визуализации изображение начнет воспроизводиться с другой точки.

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

Координатные модели, в которых точка начала координат размещается в левом верхнем углу поверхности отображения, исторически сложились как средство поддержки оборудования. Люди, обладающие математическими и естественно-научными знаниями, предпочитают, однако, применять координатные модели, в которых начало координат находится в левом нижнем углу или в центре поверхности отображения. Проанализировав размещение точки начала изображения и его ориентацию в конкретном формате, можно достаточно точно угадать, какими базовыми знаниями обладал его разработчик. Некоторые форматы требуют явного задания точки отсчета и ориентации.

Если программа обработки графического файла построена на некорректных предположениях об используемой системе координат, то изображение может появиться "вверх ногами", в зеркальном отражении, либо может быть смещено по горизонтали или вертикали.

Иногда в заголовок включают поле текстового описания растра. Это поле представляет собой комментарий, содержащий произвольные символьные (в формате ASCII) данные, например название изображения, имя файла, имя автора изображения и/или имя программы, использованной для его создания. Чтобы обеспечить возможность переносить информацию заголовка на другие платформы, это поле содержит только 7-битовые данные в формате ASCII.

Соседние файлы в папке Лекции по компьютерной графике