netlib.narod.ru< Назад | Оглавление | Далее >

Форматы файлов растровых изображений

Битовая карта — это прямоугольный массив битов, соответствующих пикселам на графическом устройстве вывода. Битовая карта имеет определенную высоту и ширину, измеряемую в пикселах. Кроме того, она обладает определенной глубиной цвета (color depth), измеряемой числом битов на пиксел (bits per pixel, обычно сокращается как bpp}. Все пикселы битовой карты имеют одинаковое число бит, которое определяет количество уникальных цветов в изображении:


Число цветов = 2число бит на пиксель


Число бит на пиксел может составлять от 1 до 32 (и более), при этом одни форматы распространены больше, другие — меньше.

В таких графических средах, как Windows, для представления цветов используются RGB-коды (red-green-blue, красный-зеленый-синий), где каждая составляющая занимает 1 байт, а полный код цвета RGB — 3 байта, т.е. 24 бита. Такая схема довольно точно отражает способность человеческого глаза различать цвета. Кроме того, она примерно соответствует возможностям современных мониторов отображать разные цвета. Дополнительный байт может определять уровни прозрачности, начиная полной непроницаемостью и кончая полной прозрачностью. И все же 32 бита на пиксел — это не верхний предел. Некоторые приложения, например, программы для работы с изображениями в медицине, требуют большего числа бит на пиксел для повышенного разрешения.

Растровые изображения с разрядностью 1 бит на пиксел являются двухуровневыми (bilevel) или монохромными (monochrome). Возможны лишь два цвета; обычно, но не всегда, это черный и белый. Такое растровое изображение, как правило, включает небольшую таблицу (или палитру) цветов, указывающую два цвета, связанных с двумя значениями битов.

На заре эпохи Windows были распространены изображения с разрядностью 4 бита на пиксел; их можно найти и сейчас. Например, значки зачастую являются 16-цветными изображениями. Эти 16 цветов представляют собой комбинации красного, зеленого и синего основных цветов в стандартной и темной версиях. Такое растровое изображение содержит таблицу цветов, указывающую точные цвета, соответствующие 16 возможным комбинациям битов.

Разрядность одного из самых распространенных форматов растровых изображений — 8 бит на пиксел. Зачастую изображение представляется в градациях серого (gray scale), и 8 бит соответствуют 256 или меньшему числу градаций серого, начиная черным и кончая белым. Цветные изображения также можно хранить в битовых картах с 8 битами на пиксел, тогда для изображения выбираются 256 или менее конкретных цветов. Отобранные цвета иногда называют оптимизированной палитрой (optimized palette) изображения.

В растровом изображении с разрядностью 16 бит на пиксел обычно используется по 5 бит для красной зеленой и синей составляющих; 1 бит остается незадействованным. Таким образом, код основного цвета может иметь 32 значения, что в целом дает 32 768 уникальных цветов. Иногда зеленому цвету выделяют дополнительный бит, так как именно к этому цвету наиболее чувствителен глаз человека. Такие растровые изображения иногда называют «5–6–5», указывая число бит для каждого из основных цветов. Разрядность в 15 или 16 бит на пиксел обычно называется средним качеством цветопередачи (high color) и недостаточна для представления градаций цвета на реалистичных изображениях.

Разрядность полноцветного (full-color, true-color) растрового изображения — 24 бита на пиксел. Каждый пиксел — это 24-битовый код цвета RGB. При использовании в растровом изображении точно 3 байтов на пиксел возможны проблемы производительности: обычно наиболее эффективная работа 32-разрядных процессоров обеспечивается при доступе к 32-разрядным значениям на 32-разрядных границах памяти.

Можно использовать растровые изображения с разрядностью 32 бита на пиксел, в которых реально используются 24 бита, а 1 байт добавлен только для оптимизации производительности. Этот дополнительный байт может также содержать сведения о прозрачности, называемые альфа-каналом (alpha channel). Альфа-значение определяет уровень прозрачности каждого конкретного пиксела.

Растровые изображения могут быть очень большими. Так, если разрешение монитора — 1 600 × 1 200 пикселов, растровое изображение с разрядностью 24 bpp и размером, равным размеру экрана, занимает около 5 Мб. Именно поэтому значительные усилия затрачивались на разработку методов сжатия изображений.

Один из простейших методов, известный практически всем, кто знает о сжатии изображений, — это кодирование длин серий (run-length encoding, RLE). Например, при наличии 12 последовательных голубых пикселов имеет смысл сохранить не повторяющиеся пикселы, а их количество. RLE обычно подходит для изображений с ограниченным количеством цветов, например мультипликационных.

Программа, использующая более сложные алгоритмы, должна проанализировать данные на наличие повторяющихся комбинаций. Значительный прогресс в сжатии изображений имел место в конце 1970-х, когда Джейкоб Зиф (Jacob Zif) и Абрахам Лемпель (Abraham Lempel) опубликовали методы сжатия LZ77 и LZ78. Эти алгоритмы на лету выявляют совпадающие последовательности данных и эффективно их используют. В 1984 г. Терри Уэлч (Terry Welch) из Sperry Research Center (в настоящее время — часть Unisys), основываясь на алгоритме LZ78, описал принципы алгоритма LZW. На LZW основаны несколько популярных форматов сжатия изображений 1. Однако недавно Unisys запретила применять алгоритм LZW без лицензии. Учитывая, что LZW уже использовался в нескольких укоренившихся стандартах (включая GIF), большая часть программистов пренебрегла требованиями Unisys; кроме того, этот алгоритм намеренно перестали использовать в новых форматах сжатия.

Алгоритм RLE и все производные алгоритма LZ — это методы сжатия без потерь (loseless), позволяющие полностью восстановить исходную информацию из сжатых данных (доказать, что конкретный алгоритм сжатия без потерь работает не для всех файлов, очень просто: после сжатия размер некоторых файлов вырастает!). Сжатие без потерь полезно при работе с электронными таблицами и текстовыми документами. Гораздо реже его применяют для реалистичных изображений, например оцифрованных фотографий.

В связи с этим в последнее время, когда потребовалось сжатие фотографических изображений, стали популярны методы сжатия с потерями (lossy). Сжатие с потерями достигает лучших результатов, опуская незаметные или малозаметные глазу человека данные. Однако при сильном сжатии с потерями возможно заметное ухудшение качества изображения.

Форматы файлов растровых изображений, поддерживаемые классом Image, указываются в статических свойствах класса ImageFormat, определенного в пространстве имен System.Drawing.Imaging:


Статические свойства ImageFormat



Тип Свойство Доступ Описание

ImageFormat Bmp Чтение Аппаратно-независимый растр Windows (device-independent bitmap, DIB)
ImageFormat MemoryBmp Чтение DIB в памяти (без заголовка файла)
ImageFormat Icon Чтение Формат значков Windows
ImageFormat Gif Чтение Формат обмена графическими данными (CompuServe Graphics Interchange Format)
ImageFormat Jpeg Чтение Формат Объединенной группы экспертов по обработке фотоизображений (Joint Photographic Experts Group)
ImageFormat Png Чтение Переносимая сетевая графика (Portable Network Graphics)
ImageFormat Tiff Чтение Теговый формат файлов изображений (Tag Image File Format)
ImageFormat Exif Чтение Формат обмена изображений (Exchangeable image format)
ImageFormat Wmf Чтение Метафайл Windows (Windows metafile)
ImageFormat Emf Чтение Расширеннвгй метафайл Windows (Windows enhanced metafile)


Возможно, вам знакомо большинство этих форматов. На всякий случай ниже дано краткое описание каждого из них.



1 Хороший источник сведений об истории, технологии и программировании методов сжатия данных — книга Марка Нельсона (Mark Nelson) и Жан-Лупа Гайли (Jean-Loup Gailly) «The Data Compression Book», 2-е издание (New York: M.T Books, 1985).


netlib.narod.ru< Назад | Оглавление | Далее >

Сайт управляется системой uCoz