Битность изображения – Photoshop: основные сведения об изображениях

Содержание

Глубина цвета — Howling Pixel

Глубина́ цве́та (ка́чество цветопереда́чи, би́тность изображе́ния) — термин компьютерной графики, означающий количество бит (объём памяти), используемое для хранения и представления цвета при кодировании одного пикселя растровой графики или видеоизображения.

Часто выражается единицей бит на пиксел (англ. bits per pixel, bpp).

Монохромные изображения

Монохромные изображения кодируются с помощью одномерной шкалы яркости. Обычно это набор из чёрного и белого цвета и промежуточных оттенков серого, но могут использоваться и другие комбинации: например, монохромные мониторы часто используют зелёный или оранжевый цвет свечения вместо белого.

Индексированные цвета и палитры

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

  • 1-битный цвет (21 = 2 цвета): бинарный цвет, чаще всего представляется чёрным и белым цветами (или чёрным и зелёным)
  • 2-битный цвет (22 = 4 цвета): CGA, БК.
  • 3-битный цвет (2
    3
    = 8 цветов): множество устаревших персональных компьютеров с TV-выходом
  • 4-битный цвет (24 = 16 цветов): известен как EGA и в меньшей степени как VGA-стандарт с высоким разрешением
  • 5-битный цвет (25 = 32 цвета): Original Amiga chipset
  • 6-битный цвет (26 = 64 цвета): Original Amiga chipset
  • 8-битный цвет (28 = 256 цветов): устаревшие Unix-рабочие станции, VGA низкого разрешения, Super VGA, AGA (стоит заметить что тот же VGA-режим, так называемый X-Mode, за счет технологии установки палитры позволял отобразить 256 цветов из цветового набора 262 144 цветов)
  • 12-битный цвет (212 = 4096 цветов): некоторые Silicon Graphics и Color NeXTstation системы. Отдельного упоминания заслуживает уникальный режим HAM оригинальных персональных компьютеров Amiga. В этом видеорежиме компьютер Amiga на экране мог отобразить до 4096 цветов, при этом один пиксель изображения кодировался только шестью битами.

«Реальные» цвета (TrueColor)

С увеличением количества бит в представлении цвета, количество отображаемых цветов стало непрактично большим для цветовых палитр (20-битная глубина цвета требует больше памяти для сохранения цветовой палитры, чем памяти для сохранения самих пикселей изображения). При большой глубине цвета на практике кодируют яркости красной, зелёной и синей составляющих — такое кодирование называют RGB-моделью.

8-битный «реальный» цвет

Сильно ограниченная, однако «реальная» цветовая схема, в которой по три бита (по восемь возможных значений) для красной (R) и зелёной (G) составляющих, и два оставшихся бита на пиксель для кодирования синей (B) составляющей (четыре возможных значения), позволяют представить 256 (8×8×4) различных цвета. Нормальный человеческий глаз менее чувствителен к синей составляющей, чем к красной и зелёной, поэтому синяя составляющая представляется одним битом меньше. Такая схема использовалась в MSX2-серии компьютеров в 1990-х годах.

Не следует путать такую схему с 8 bpp индексным цветом, который может быть представлен выбором различных цветовых палитр.

12-битный «реальный» цвет

12-битный «реальный» цвет кодируется 4 битами (по 16 возможных значений) для каждой из R, G и B-составляющих, что позволяет представить 4096 (16×16×16) различных цветов. Такая глубина цвета иногда используется в простых устройствах с цветными дисплеями (например, в мобильных телефонах).

HighColor

HighColor или HiColor разработан для представления оттенков «реальной жизни», то есть наиболее удобно воспринимаемый человеческим глазом. Такой цвет кодируется 15 или 16 битами:

  • 15-битный цвет использует 5 бит для представления красной составляющей, 5 для зелёной и 5 для синей, то есть 2
    5
     = 32 возможных значения каждого цвета, которые дают 32 768 (32×32×32) возможных цвета.
  • 16-битный цвет использует 5 бит для представления красной составляющей, 5 для синей, но 6 бит (26 = 64 возможных значения) для представления зелёной, так как человеческий глаз более чувствителен к зелёной составляющей. Таким образом получаются 65 536 (32×64×32) цветов. 16-битный цвет упоминается как «тысячи цветов» (thousands of colors) в системах Macintosh.
  • Большинство современных ЖК-дисплеев отображают 18-битный цвет (64×64×64 = 262 144 комбинации), но благодаря дизерингу разница с TrueColor-дисплеями на глаз незначительна.

TrueColor

TrueColor (от англ. true color — «истинный/настоящий цвет») приближен к цветам «реального мира», предоставляя 16,7 млн различных цветов. Такой цвет наиболее приятен для восприятия человеческим глазом различных фотографий, для обработки изображений.

  • 24-битный TrueColor-цвет использует по 8 бит для представления красной, синей и зелёной составляющих. Кодируется 28 = 256 различных вариантов представления цвета для каждого канала, или всего 16 777 216 цветов (256×256×256). 24-битный цвет упоминается как «миллионы цветов» (millions of colors) в системах Macintosh.

24-битный «реальный» цвет + Альфа канал (32bpp)

«32-битный цвет» — это пример неправильного употребления термина при описании глубины цвета. Заблуждением является то, что 32-битный цвет позволяет представить 232 = 4 294 967 296 различных оттенков[1].

В реальности 32-битный цвет является 24-битным (TrueColor) с дополнительным 8-битным каналом, который либо заполнен нулями (не влияет на цвет), либо представляет собой альфа-канал, который задаёт прозрачность изображения для каждого пикселя — то есть существует 16 777 216 оттенков цветов и 256 градаций прозрачности

[1].

Причиной, по которой используют «пустой» канал, является стремление оптимизировать работу с видеопамятью, которая у большинства современных[когда?] компьютеров имеет 32-битную адресацию и 32-битную шину данных.

Также 32-битным является представление цвета в системе CMYK (по 8 бит отводятся на голубой, пурпурный, жёлтый и чёрный цвета)[1].

Deep Color (30/36/48 бит)

В конце 1990-х годов некоторые high-end графические системы, например SGI, начали использовать более 8 бит на канал — например, 12 или 16 бит. Программы профессионального редактирования изображений стали сохранять по 16 бит на канал, предоставляя «защиту» от накапливания ошибок округления, погрешностей при вычислении в условиях ограниченной разрядной сетки чисел.

Для дальнейшего расширения динамического диапазона изображений были созданы различные модели. Например High Dynamic Range Imaging (HDRI), использует числа с плавающей запятой и позволяет наиболее точно описывать в изображениях интенсивный свет и глубокие тени в одном и том же цветовом пространстве. Различные модели описывают такие диапазоны, применяя более 32 бит на канал. Можно отметить созданный Industrial Light & Magic на рубеже XX и XXI веков формат OpenEXR, использующий 16-битные (половинной точности) числа с плавающей запятой, которые позволяют представить цветовые оттенки лучше, чем 16-битные целые числа. Предполагается, что такие схемы представления цвета заменят стандартные схемы, как только аппаратное обеспечение сможет с достаточной скоростью и эффективностью поддерживать новые форматы.

Поддержка в индустрии

Поддержка Deep Color (30, 36, или 48 бит) была добавлена в аппаратный интерфейс передачи цифрового видеосигнала HDMI 1.3 в 2006 году

[2].

Стандарт DisplayPort поддерживает глубину цвета более 24 бит[3][4].

В Windows 7 есть поддержка цветов с глубиной от 30 до 48 бит[5].

При этом типичные ЖК-дисплеи были способны отображать пиксели с глубиной не более 24 бит, а форматы 36 и 48 бит позволяют кодировать больше цветов, чем способен различать человеческий глаз[6][7].

Телевизионный цвет

Множество современных телевизоров и компьютерных дисплеев отображают изображения варьируя интенсивностью трёх основных цветов: синий, зелёный и красный. Яркий жёлтый, например, является композицией одинаковых по интенсивности красной и зелёной составляющих без добавления синей компоненты. Однако это только приближение, которое не даёт в действительности яркий жёлтый цвет. Именно поэтому последние технологии, как например Texas Instruments BrilliantColor расширяют типовые красные, зелёные и синие каналы новыми: голубым (сине-зелёным), пурпурным и жёлтым цветами

[8]. Mitsubishi и Samsung используют упомянутую технологию в некоторых телевизионных системах.

Подразумевая использование 8-битных каналов 6-цветные изображения кодируются 48-битными цветами.

ATI FireGL V7350 видеоадаптеры поддерживают 40- и 64-битные цвета[9].

См. также

Примечания

  1. 1 2 3 Rich Franzen, Color Spaces, 1998—2010  (англ.)
  2. ↑ HDMI :: Resources :: Knowledge Base (недоступная ссылка). Дата обращения 7 марта 2016. Архивировано 10 июля 2009 года.
  3. ↑ An Inside Look at DisplayPort v1.2
  4. ↑ VESA veröffentlicht DisplayPort 1.3
  5. ↑ Windows 7 High Color Support
  6. Mark Hachman. HDMI Upgraded To Support ‘Deep Color’ (англ.), ExtremeTech (12 June 2006). Дата обращения 19 июля 2015.
  7. Том Копин (Kramer USA), Сергей Дмитренко. Глубокие цветные проблемы 28-29. журнал Mediavision (май 2013). Дата обращения 19 июля 2015.
  8. Hutchison, David C. Wider color gamuts on DLP display systems through BrilliantColor technology (англ.) // Digital TV DesignLine : journal. — 2006. — 5 April. Архивировано 28 сентября 2007 года.
  9. ↑ ATI Launches The 1GB FireGL V7350 Video Card

Ссылки

На других языках

This page is based on a Wikipedia article written by authors (here).

Text is available under the CC BY-SA 3.0 license; additional terms may apply.
Images, videos and audio are available under their respective licenses.

howlingpixel.com

Понятие битовой глубины в фотошопе

Возможно, вы слышали такие выражения как «8-бит» и «16-бит». Когда люди упоминают биты, они говорят о том, сколько цветов содержится в файле изображения. Цветовые режимы фотошопа определяют разрядность изображения (1, 8, 16 или 32 бит). Так как вы будете работать с этими характеристиками довольно часто (например, когда создаете новое изображение в диалоговом окне

Новый вам предстоит выбрать цветовой режим и количество бит), полезно узнать, что эти цифры означают.

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

Так битовая глубина изображения определяет, сколько цветовой информации содержит данное изображение. Чем больше битовая глубина, тем больше цветов может отображаться в изображении. 

Рассмотрим вкратце варианты с различным числом бит в Photoshop.

1. В цветовом режиме Битовый формат пиксели могут быть только черными или белыми. Изображения в этом режиме называются

1-битными, потому что каждый пиксель может быть только одного цвета — черный или белый.

2. 8-битное изображение может содержать два значения в каждом бите, что равняется 256 возможным значениям цвета. Почему 256? Так как каждый из восьми бит может содержать два возможных значения, вы получаете 256 комбинаций.

С 256 комбинациями для каждого канала в изображении RGB у вас может быть более 16 миллионов цветов.

3. 16-битные изображения содержат 65536 цветов в одном канале. Они выглядят так же, как и другие изображения на экране, но занимают в два раза больше места на жестком диске. Такие изображения очень нравятся фотографам, потому что дополнительные цвета обеспечивают им большую гибкость при коррекции параметров Кривые и Уровни, даже несмотря на то, что более крупные размеры файлов могут очень сильно замедлить работу программы.

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

4. 32-битные изображения, которые относят к изображениям с расширенным динамическим диапазоном (High Dynamic Range, HDR), содержат больше цветов, чем вы можете себе представить. Но об этом пойдет речь в будущих статьях об HDR.

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

В этом документе приведено элементарное введение в принципы хранения картинок (растровые изображения, bitmap) и их отображения, как это используется в компьютерной графике (перевод [1]).

Растр (bitmap, дословный перевод этого термина «поле бит», или «карта бит») определен как равномерный, прямоугольный набор ячеек, которые называются пикселами (pixel, переводится как «точка»). Обычно каждый пиксел хранит информацию о цвете точки, но понятие «цвет» трактуется более широко — например, цвет может быть монохромным (monochrome, т. е. только 2 цвета — черный и белый, 0 и 1), или с градациями серого (grayscale). В сущности, чтобы полностью сохранить данные картинки, нужно знать только количество точек (оно зависит от размера сторон прямоугольного поля бит N и M) и информацию содержимому каждого пикселя (его глубину цвета, colour depth). Именно в таком виде картинки хранятся в памяти компьютера, когда они выводятся на устройство отображения (экран), однако к этим двум фундаментальным параметрам также могут добавляться другие дополнительные данные.

Обратите внимание, что карта бит bitmap всегда ориентирована горизонтально и вертикально. Пикселы считают маленькими квадратиками, хотя на практике они могут иметь другое реальное физическое соотношение сторон (aspect ratio).

Чаще всего bitmap-ы используются для представления картинок в компьютерах. Например, картинка, показанная ниже, имеет 397 пикселя по горизонтали 294 пикселя по вертикали, и каждый пиксель содержит значение уровня серого, которое может быть для каждой точки 256 различных оттенков.

Что такое глубина цвета (Colour depth). Каждый пиксел растра bitmap содержит определенную информацию, обычно интерпретируемую как цвет. Смысл и формат содержимого этой информации всегда одинаков для каждой отдельной точки изображения bitmap. Количество информации для каждой точки должно определяться требованиями приложения, однако имеется несколько стандартных, общепринятых форматов данных, содержащих описание каждой точки растра.

Рассмотрим эти самые популярные форматы для передачи растровой картинки.

Формат 1 bit (black and white). Это самый компактный из всех возможных вариантов представления графической информации для каждого пикселя. Результирующая картинка получается монохромной, или черно-белой (точка может иметь либо черный цвет, либо белый, других вариантов нет). Пикселы, бит которых равен лог. 0, считаются черными, и пикселы, бит которых равен лог. 1, считаются белыми. Обратите внимание, что хотя есть только 2 возможных состояния для каждой точки, на практике на этапе отображения обычно есть возможность привязки к этим двум состояниям двух цветов, т. е. 0 соответствует одному цвету, и 1 другому цвету.

8 бит серого (8 bit grayscale). В этом случае каждый пиксел получает в соответствие 1 байт (8 бит) места в памяти, благодаря чему можно закодировать 28 = 256 различных состояний точки. Если эти состояния отображены на палитру уровней серого, то получится черно-белая картинка с 256 градациями яркости (greyscale image). Принято, что 0 обычно соответствует максимально черному цвету, и 255 максимально белому. Остальные уровни серого будут линейно по яркости соответствовать промежуточным уровням кодирования, т. е., к примеру, уровень 127 будет соответствовать примерно средней яркости, 50% по яркости от уровня максимума белого.

В любом частном приложении диапазон уровней серого может быть привязан к произвольным уровням яркости или даже цвета, т. е. уровни 0-255 могут быть преобразованы некоторыми программами в уровни 0-1, но большинство программ преобразуют уровни 0-255 к уровням 0-65535 (в качестве примера см. спецификацию системы цветового кодирования Apple).

24 bit RGB. Это следующий шаг от кодирования 8 bit grey, теперь по 8 бит выделено каждому из компонентов цвета red (красный), green (зеленый) и blue (синий). В каждой компоненте уровень 0 соответствует отсутствию этого цвета, и 255 соответствует полному насыщению цвета. Поскольку каждый компонент дает 256 различных состояний, то всего можно закодировать 224 = 28 * 28 * 28 = 256 * 256 * 256 = 16777216 возможных цветов.

Идея цветового пространства RGB является фундаментальной концепцией компьютерной графии. В пространстве RGB любой цвет представлен точкой внутри куба с перпендикулярными осями r,g,b.

Обратите внимание, что что уровни серого формируют прямую линию от черного до белого, составляя диагональ куба r = g = b.

8 bit indexed colour. Индексированный цвет — более экономичный способ сохранять цветные растровые изображения без использования 3 байт на точку. Как и для формата градаций серого 8 бит, на точку здесь приходится 1 байт, но только теперь значение этого байта указывает на значение цвета в таблице RGB (см. рисунок ниже). Такая таблица называется палитрой. Поскольку значение байта указывает на цвет в палитре как индекс в таблице, то такой формат называют еще формат с индексированными цветами.

Есть некоторое количество интересных атрибутов в такой системе с индексированными цветами. Если в картинке меньше 256 цветов, то она будет иметь такое же качество, как и 24 bit bitmap, однако будет занимать место в 3 раза меньше. Интересующие цвета и эффекты анимации могут быть достигнуты простым изменением палитры, это немедленно повлияет на внешний вид картинки.

Обычно для уменьшения большой картинки 24 bit bitmap применяют её преобразование в формат с индексированными цветами и оптимизированной палитрой. Оптимизированная палитра позволяет лучше всего воспроизвести цвета, которые присутствуют в оригинальном растре bitmap.

4 bit indexed colour. Принцип здесь тот же самый, что и в формате с индексированным цветом 8 бит, то только теперь точка кодируется не 8 битами, а 4-мя, т. е. для индекса в таблице используется только половина байта. Это позволяет поддерживать таблицу из 16 цветов.

32 bit RGB. Здесь принцип хранения картинки тот же самый, что и в цветном формате 24 бита, но еще добавляется 1 байт канала альфа (alpha channel). Этот канал может быть использован для маскирования областей картинки, или для представления прозрачности.

16 bit RGB. Здесь на каждый цвет приходится по 5 бит, и 1 бит остается на канал альфа (см. рисунок ниже).

[Что такое разрешение картинки (Resolution)]

Разрешение это атрибут картинки, который нужен для визуального отображения картинки или вывода на печать, поскольку у самих точек нет никакой информации о их физическом размере. Разрешение как раз дает такую привязку к физическим размерам, и обычно указывается в количестве пикселов на дюйм (dots per inch, или сокращенно DPI). На устройствах с прямоугольными пикселами разрешение может быть указано двумя числами, с указанием горизонтального и вертикального разрешения.

Концепция разрешения не зависит от информационного содержания растра bitmap, и становится важной только при переносе растра на физические объекты (экран монитора или лист бумаги принтера). Это особенно важно, когда количество точек по горизонтали и вертикали исходного растра не соответствует количеству точек конечного устройства вывода. Качество печати будет зависеть от установленного разрешения картинки. Поскольку разрешение определяет физический размер точки, то разрешение может также использоваться для изменения размера картинки при выводе изображения.

В качестве примера рассмотрим одну картинку bitmap размером в 200 точек по горизонтали и 100 по вертикали. Если этот растр будет напечатан с разрешением 100DPI, то он получит размер 2 дюйма по горизонтали и 1 дюйм по вертикали. Но если ту же самую картинку распечатать с разрешением 200 DPI, то она будет размером всего лишь 1 дюйм по горизонтали и полдюйма по вертикали.

Всякий раз, когда растр bitmap отображается на мониторе компьютера, необходимо учитывать разрешение картинки. Многие мониторы могут иметь разрешение от 60DPI (низкое качество) до 120DPI (высокое качество) и более. Точно так же, как и при выводе на печать, чем выше разрешение картинки, тем она будет выглядеть меньше по размеру на экране монитора — из-за того, что размер каждого пиксела будет меньше.

На следующем примере можно увидеть две картинки с одинаковым содержанием растра bitmap, но с разным разрешением (с разным размером точки). Картинка меньшего размера имеет разрешение 80DPI, и большая картинка имеет разрешение 30DPI. В увеличенной версии картинки отдельные пиксели намного заметнее.

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

[Преобразование глубины цвета]

Часто нужно отобразить растр bitmap с одной глубиной цвета на устройстве, которое имеет другие возможности по параметру глубины цвета. Конечно, если у конечного устройства можно вывести больше цветов, чем есть на картинке bitmap, то растр может быть отображен наилучшим образом. В обратной ситуации, когда у устройства назначения глубина цвета отличается в худшую сторону (количество отображаемых цветов меньше, чем количество цветов растра), то картинку следует преобразовать во что-то, что будет лучше выглядеть на экране монитора.

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

Предположим, растр bitmap 75DPI нужно отобразить на черно-белом лазерном принтере с разрешающей способностью 300DPI. В таком случае каждую точку картинки можно представить матрицей 4×4 черных и белых точек принтера, и таким способом передать яркость точки картинки.

Есть несколько разных техник для получения такого соответствия матриц точек яркости точки оригинальной картинки. Одна из таких техник называется дизеринг (dithering, дословный перевод «размывание»). Даже для дизеринга есть несколько возможных алгоритмов для получения матриц пикселей для разных уровней яркости. На картинке ниже показана диаграмма смены уровней яркости и (вертикальная полоса слева) и два варианта черно-белого дизеринга — скорректированного увеличения по образцу (greatly enlarged using pattern) и размытие с диффузией (diffusion dithering).

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

Мы рассмотрели преобразование глубины цвета только для картинок с градациями серого (greyscale). Преобразование цветных картинок с высокой глубиной цвета в малую использует тот же самый принцип, отличие только в том, что процедура конверсии накладывается на основные компоненты цвета, на каждый по отдельности. Например, для RGB делается дизеринг отдельно по каждому каналу R, G, B.

Предположим, что у нас есть 8-битная картинка с градациями серого; какой самый простой способ сохранить её как двухцветную (монохромную, 1 бит на точку) [2]?

1-битные изображения все еще используются в коммерческой печати. Обычный файл формата CMYK или картинка с градациями серого перед созданием плат офсетной печати преобразуются в 1-битное изображение. Картинка, печатаемая на лазерном принтере, также считается в какой-то момент растровым 1-битным изображением. Изображения на футболках или шевронах часто печатаются как 1-битные (вспомните классическое изображение профиля Эрнесто Че Гевары).

Не существует простого метода получить монохромный растр из многоцветного. Всегда перед преобразованием необходимо сделать некоторый выбор. Рассмотрим несколько примеров.

Исходная картинка:

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

При таком преобразовании можно регулировать порог оценки яркости:

Дизеринг. Этот вид преобразования используется в некоторых монохромных цифровых принтерах для передачи оттенков серого.

Разновидностью дизеринга является применение стандартных шаблонов точек для передачи уровней яркости (postscript pattern). Картинки после такое преобразования могут в некоторых случаях лучше выглядеть при отображении на цифровых мониторах.

[Хранение растра bitmap]

Наиболее очевидный способ сохранить растр bitmap — просто представить информацию в виде списка точек, байт за байтом, строка за строкой. Файлы, где графическая информация сохранена таким способом, часто называют RAW-файлами (raw переводится как «сырые данные»). Размер места хранения для такого файла можно вычислить по количеству точек в картинке (размерам растра bitmap N x M) и глубине цвета каждой точке в битах (B). Вот формула для вычисления размера файла:

                               N * M * B
размер файла (в килобайтах) = ———————————
                               8 * 1024

Здесь N и M это количество точек (пикселов) картинки по горизонтали и вертикали, и B это количество бит, которыми закодирован каждый пиксел. В следующей таблице показаны размеры файлов картинок bitmap, если они будут сохранены в формате RAW.

размер картинки       глубина цвета     размер файла
    128 x 128             1 bit            2 KB
                          8 bits          16 KB
                         24 bits          48 KB
    256 x 256             1 bit            8 KB
                          8 bits          64 KB
                         24 bits         192 KB
     1K x 1K              1 bit          128 KB
                          8 bits           1 MB
                         24 bits           3 MB

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

Самый грубый способ уменьшить размер файлов — ухудшить кодирование информации цвета, это так называемая техника редукции бит (bit reduction), или квантизация (quantization). Один из примеров — преобразование растра 24 bit bitmap в 8 bit indexed bitmap с использованием дизеринга для симуляции потерянных цветов. Наиболее известен среди форматов с потерями формат JPEG, и описание его работы выходит за рамки нашего обсуждения. Его основное преимущество в том, что он может предложить намного большую степень сжатия, чем форматы сжатия без потерь. Для примера рассмотрим следующую картинку bitmap с оригинальным размером 500 x 350 пикселей и 24 битами кодирования цвета на точку. По формуле для формата RAW размер не сжатого файла получится 500 x 350 x 24 / 8 / 1024 = 513 килобайт.

Сохранение этой же картинки в формате с градациями серого (редукцией бит) даст размер 171 килобайт (в 3 раза меньше), сохранение с сжатием RLE даст 388 килобайт (75% от оригинала), сохранение со сжатием LZW даст 188 килобайт (36% от оригинала), и сохранение в JPEG даст 30 килобайт (коэффициент сжатия 17:1).

Ниже мы рассмотрим пример самой простой техники сжатия без потерь, которая называется кодирование длины (run length encoding, RLE). Эта техника дает хороший выигрыш на картинках, где небольшое количество цветов. Предположим, что у нас есть маленькая картинка размером 16 x 10 пикселей, с кодированием цвета 8 бит.

Если картинка была сохранена в RAW, то для неё понадобится 16 байт на строку, всего 10 строк, т. е. 160 байт. Однако, как можно увидеть, первые две строки содержат точки одного и того же уровня, так что более эффективно сохранить количество точек и их уровень, чем сохранять уровень каждой точки по отдельности. Таким образом, на каждую строку вместо 16 байт можно оставить только 2 байта.

В формате raw первые 3 строки будут выглядеть так:

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 1 1 1 1 1 1 1 1 1 1 1 1 0 0

С использованием сжатия RLE данные этих трех строк будут закодированы так:

16 0
16 0
2 0 12 1 2 0

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

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

Следующий список дает краткое описание некоторых форматов, широко применяющихся для сохранения bitmap.

Используется на платформах: главным образом поддерживается на Mac/DOS-WINDOWS/Unix.

Владелец: Aldus

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

Используется на платформах: изначально на DOS-WINDOWS.

Владелец: ZSoft Corp

Примечания: самый старый и наиболее широко используемый формат на компьютерах с DOS. Может поддерживать индексированный цвет 24 бита. Кодируется только по принципу RLE.

Используется на платформах: наиболее часто поддерживается на Mac/DOS-WINDOWS/Unix.

Владелец: CompuServe

Примечания: GIF также является очень популярным форматом. Чаще всего он используется на билбоардах и в Интернет. Кодирование ограничено 8 бит на точку с применением индексации цветов (палитра), для компрессии используется LZW. Может содержать в себе несколько изображений и текстовые оверлеи, поддерживается прозрачность, и также может содержать в себе несколько картинок, что позволяет делать анимацию изображений.

Используется на платформах: исключительно Mac.

Владелец: Apple

Примечания: PICT используется только на компьютерах Macintosh. Реализация PICT на Macintosh работает на уровне операционной системы, и поддерживается всеми приложениями Macintosh. Этот формат отвечает за обмен изображениями на Macintosh и используется в операциях cut/copy/paste. Поддерживаются большинство пространств цвета и методов сжатия, включая JPEG.

Используется на платформах: наиболее часто поддерживается на Mac/DOS-WINDOWS/Unix.

Владелец: владельца нет, формат свободен от патентов

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

Используется на платформах: все платформы

Владелец: владельца нет

Примечания: это самый простой метод для сохранения картинок из всех, просто сохранение «сырых» (raw) байтов. Часто используется в фотокамерах для записи изображений. Например, один байт на точку для greyscale или 3 байта на точку для цветов RGB. Не существует единого стандарта на заголовок файлов RAW, это может определять сам производитель фотографического оборудования.

Используется на платформах: все платформы, изначально на UNIX

Владелец: владельца нет

Примечания: это несколько больше, чем простой raw формат, имеются некоторые согласованные части заголовка. Обычно используется для картинок 8 бит greyscale или цветных 24 bit RGB.

Используется на платформах: главным образом исключительно на DOS/Atari

Владелец: Digital Research

Примечания: поддерживается операционной системой GEM.

Используется на платформах: главным образом исключительно Amiga

Владелец: Electronic Arts

Примечания: поддерживается 4-битная таблица цветов и 24-битные цвета.

Используется на платформах: смешанная поддержка на Mac/DOS-WINDOWS/UNIX

Владелец: TrueVision Inc

Примечания: изначально разработана для плат захвата изображений VISTA. Несколько больше, чем простой RAW-формат, есть заголовок с дополнительной информацией.

Используется на платформах: главным образом DOS-Windows

Владелец: MicroSoft

Примечания: формат MicroSoft Windows, раньше использовался в основном только на ней, но потом благодаря своей простоте обрел популярность. Несжатые варианты особенно удобно использовать на маломощных встраиваемых системах. Поддерживаются глубина цвета от greyscale 1, 2, 4, 8 бита на точку до 32 битных цветных изображений.

Используется на платформах: Primarily Sun

Владелец: Sum MicroSystems

Примечания: Only supported by Sun. Use RLE and either 8 bit greyscale or 24/32 bit colour.

Используется на платформах: в основном платформа X system

Владелец: MIT X Corp

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

Используется на платформах: в основном платформа X system

Владелец: MIT X Corp

Примечания: формат сохранения экрана в X windows. Поддерживается глубина цвета от монохрома до 24 бит на точку с прямым кодированием цветов.

[Ссылки]

1. A Beginners Guide to Bitmaps site:paulbourke.net, written by Paul Bourke.
2. Saving an 8-bit grayscale image as a 2-bit image site:graphicdesign.stackexchange.com.