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) |
Возможно, вам знакомо большинство этих форматов. На всякий случай ниже дано краткое описание каждого из них.
Bmp Собственный формат файлов растровых изображений Windows, или аппаратно-независимый растр (device-independent bitmap, DIB). Формат DIB был создан на основе формата растровых изображений OS/2 1.1 и появился в Windows 3.0. До этого формат растровых изображений в Windows основывался на требованиях конкретных устройств вывода. И хотя некоторые приложения использовали старый формат для обмена файлами, он не предназначался для этой цели.
Основная часть DIB определена в документации определенных структур используемых в Win32 API, в частности, BITMAPFILEHEADER, BITMAPINFO, BITMAPINFOHEADER и их производных. Подробнее о формате DIB см. главу 15 моей книги «Programming Windows», 5th ed. (Microsoft Press, 1999). DIB-файлы обычно хранятся без сжатия. Для некоторых цветовых форматов применяется малоиспользуемая схема сжатия RLE.
MemoryBmp DIB в памяти — DIB без заголовка BITMAPFILEHEADER.
Icon Формат файлов значков Windows, расширение формата Windows DIB.
Gif Произносится «джиф». Был разработан в конце 1980-х для сети CompuServe (одной из первых интерактивных информационных служб) и остается одним из двух самых популярных форматов графики в World Wide Web. В формате GIF применяется LZW-сжатие. Документы Gif87a.txt и Gif98a.txt, описывающие данный формат файлов, широко распространены в Интернете. Спецификация GIF включает элементарную (но популярную) функцию анимации.
Jpeg Произносится «джейпег» и расшифровывается как Joint Photographic Experts Group (Объединенная группа экспертов по фотоизображениям) — собрание представителей крупных промышленных предприятий, разработавшее набор методов сжатия (как с потерями, так и без потерь) полутоновых фотоизображений. Официальный Web-узел JPEG находится по адресу http://www.jpeg.org. Действующая спецификация JPEG доступна в виде стандарта ISO. Черновик стандарта, а также другую полезную информацию можно найти в книге Вильяма Пеннибэйкера (William B. Pennebaker) и Джоан Митчел (Joan L. Mitchell) «JPEG: Still Image Data Compression Standard» (New York: Van Nostrand Reinhold, 1993).
Согласно стандарту JPEG не является форматом файлов. Правильное название того, что обычно называют форматом файлов JPEG — JPEG File Interchange Format (JFIF, формат обмена файлами JPEG). Подробнее о JFIF см. документ http://www.jpeg.org/public/jfif.pdf. JFIF включает метод сжатия JPEG с потерями и наряду с GIF стал одним из двух самых популярных форматов графики в Web (в спецификации HTML нет специального упоминания ни GIF, ни JPEG, и все же они стали стандартами Web-графики де-факто).
Png Произносится «пинг». Portable Network Graphics — это формат сжатия без потерь, разработанный под протекцией World Wide Web Consortium (W3C) в качестве бесплатной и не требующей лицензирования альтернативы GIF. Большинство современных Web-браузеров поддерживают PNG, а также GIF и JPEG. Подробнее о формате PNG можно узнать по адресу http://www.w3c.org/Graphics/PNG. Если нужно сжимать нефотографические изображения и вы не хотите использовать GIF, лучшее решение — задействовать PNG.
Tiff Формат Tag Image File Format разработан совместно компаниями Aldus (создателем популярной программы PageMaker) и Microsoft. Сейчас спецификация TIFF принадлежит Adobe, вы найдете ее по адресу http://partners.adobe.com/asn/developer/pdfs/tn/TIFF6.pdf.
Exif Формат обмена изображениями (Exchangeable image format) разработан организацией, которая сейчас называется Japan Electronics and Information Technology Industries Association (JEITA, Японская ассоциация развития технологий электронной и информационной промышленности), для цифровых камер. Со спецификацией EXIF 2.2 можно ознакомиться по адресу http://www.exif.org/Exif2-2.PDF.
Wmf He является форматом файлов растровых изображений! Это формат метафайлов, которые представляют собой набор функций построения графики (обычно векторной}, хранящихся в двоичной форме. WMF относится к старому формату метафайлов Windows, применявшемуся до 32-разрядных версий этой ОС.
Emf Расширенный формат метафайлов Windows, появившийся в 32-разрядных версиях Windows. С метафайлами можно работать, как и с любыми другими изображениями, однако они относятся к отдельному классу. Подробнее о метафайлах рассказывается в главе 23 этой книги.
1 Хороший источник сведений об истории, технологии и программировании методов сжатия данных — книга Марка Нельсона (Mark Nelson) и Жан-Лупа Гайли (Jean-Loup Gailly) «The Data Compression Book», 2-е издание (New York: M.T Books, 1985).
netlib.narod.ru | < Назад | Оглавление | Далее > |