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

Определение цвета с помощью палитры

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

Например, 4-битовые пиксельные данные могут быть использованы для представления изображений, содержащих 16 цветов. Эти 16 цветов обычно определены в палитре, которая почти всегда включается в тот же самый файл. Каждое пиксельное значение рассматривается как индекс в этой палитре и содержит одно из чисел в диапазоне 0—15 Программа визуализации, читая из файла пиксельное значение, использует его как индекс палитры, что позволяет получить из этой палитры то значение цвета, которое и будет использовано для окрашивания пикселя на устройстве вывода

Палитра представляет собой массив цветовых величин, заданных с максимально возможной точностью. На практике каждый элемент палитры обычно занимает 24 бита, или 3 байта, хотя с учетом возможных будущих расширений и зависимости от аппаратного обеспечения элементы палитры иногда сохраняются в 32 битах, или 4 байтах Любопытно отметать, что цветовые модели, многие из которых существуют с начала компьютерной эры, часто базируются на трех первичных цветах, следовательно, использование трех байтов для хранения данных в них также возможно.

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

3 байта на цвет * 16 цветов = 48 байтов

или

4 байта на цвет * 16 цветов = 64 байта

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

Аналогично 8-битовые пиксельные данные могут быть использованы для представления изображений, состоящих из 256 цветов. Каждое пиксельное значение будет принадлежать диапазону 0—255, представляя собой индекс в 256-цветной палитре. Объем памяти, занимаемый такой палитрой, составит:

3 байта на цвет * 256 цветов = 768 байтов

или

4 байта на цвет * 256 цветов == 1024 байта

Предположим, что в цветовой модели, используемой вашим форматом изображения, значение (255, О, О) соответствует красному цвету. Определим примерную палитру в виде массива из 16 элементов.

( 0, 0, 0)

(255, 255, 255)

(255, 0, 0)

( 0, 255, 0)

( 0, 0, 255)

(255, 255, 0)

( 0, 255, 255)

(255, 0, 255)

(128, 0, 0)

( 0, 128, 0)

( 0, 0, 128)

(128, 128, 0)

( 0, 128, 128)

(128, 0, 128)

(128, 128, 128)

(255, 128, 128)

Поскольку в этой палитре значение (255,0,0) имеет третий элемент, то для записи этого цвета мы можем использовать значение 2 (естественно, если отсчет индексов этого массива начинается с 0), предположив в соответствии с принятым соглашением, что это значение будет интерпретировано как индекс данного массива. Следовательно, всякий раз, для того чтобы задать красный цвет в пиксельных данных, мы можем сохранять значение 2. Аналогичным образом мы будем поступать и в отношении всех остальных цветов, из которых состоит данное изображение.

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

В больших и сложных форматах изображений косвенное сохранение цветов с использованием палитр экономит память за счет сокращения объема данных, записываемых в файл. Например, если вы применяете формат, сохраняющий трехбайтовую цветовую информацию для каждого пикселя (наиболее распространенный случай), и используете 256 цветов, то пиксельные значения растра размером 320х200 пикселей потребуют 192000 (320 * 200 * 3) байтов памяти. Если это же изображение сохранить с использованием палитры из 256 3-байтовых элементов, то для каждого пикселя в растре потребуется только один байт, содержащий значение индекса в диапазоне от 0 до 255. В результате освободятся два из трех байтов, требуемых для каждого пикселя, и соответственно необходимый объем памяти сократится до 64000 (320 * 200 * 1) байтов.

В действительности мы должны учитывать еще и объем памяти, требуемый для сохранения самой палитры — 768 (256 * 3) байтов. В результате для сохранения данных такого файла потребуется 64768 байтов, что приблизительно в три раза меньше, чем в случае прямого сохранения цветов. Однако следует обратить внимание на то, что если объем растровых данных в файле невелик, то включение палитры может привести к обратному результату — требуемый объем памяти возрастет, если объем, необходимый для включения палитры, превысит сэкономленный.

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

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

Тем не менее, что использование палитры оправдано не во всех случаях. Ведь для сохранения ее самой требуется дополнительный объем памяти. Например, для размещения палитры, определяющей 32768 цветов, потребуется как минимум 98304 байта памяти. Исходя из этого, изображение, содержащее более 256 цветов, обычно сохраняется в формате без использования палитры, где каждое пиксельное значение прямо задает один цвет.

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

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

Термин truecolor используется при работе с изображениями, в которых применяется большое количество цветов. Что мы подразумеваем здесь под понятием "большое количество"? Принимая во внимание нынешние цены на жесткие диски, а также то, что некоторые пользователи уже имеют в своем распоряжении более 1 Гб дискового пространства, мы, тем не менее, считаем, что большинство людей рассматривает объем в 100-200 Кб как сравнительно большой. Если вспомнить, что для сохранения палитры из 256 цветов потребуется не более 1 Кб памяти, а для сохранения палитры из 32768 и более цветов — как минимум около 100 Кб, то станет очевидным, что количество цветов 256 не считается "большим", а вот 32768, 65536 и 16,7 миллионов для большинства пользователей уже "большое". При этом мы рассматривали только объем памяти, необходимый для сохранения самой палитры, — а ведь еще есть данные изображения!

Вместо того, чтобы включать в файл палитры такого большого объема, можно представить пиксельные значения в виде явно заданных цветовых величин. На практике эти значения состоят из трех частей, каждая из которых представляет основной цвет в используемой цветовой модели, например в RGB. Пиксельные значения изображений, использующих 32768 или 65536 цветов, обычно сохраняются в двух смежных байтах (или 16 битах) файла, поскольку практически все компьютеры обрабатывают байты как минимально адресуемую единицу памяти. Программа визуализации должна в этом случае читать такие 16-битовые пиксельные значения и раскладывать их на 5-битовые цветовые составляющие:

16 битов = 2 байта = (8 битов, 8 битов) = (1, 5, 5, 5) = (1, R, G, В)

Каждый 5-битовый компонент может принимать значения из диапазона 0—32. В случае 32768-цветного RGB-изображения используются только 15 битов, а один бит отбрасывается или применяется для других целей. Для 65536-цветньи RGB-изображений 16-битовые пиксельные значения раскладываются асимметрично, чтобы использовать и этот лишний бит. Ниже приведен один из вариантов такого разложения:

16 битов = 2 байта = (8 битов, 8 битов) = (6, 5, 5) = (R, G, В)

На практике обычно используется следующее разложение:

16 битов = 2 байта = (8 битов, 8 битов) = (5, 6, 5) = (R, G, В)

При таком разложении лишний бит используется для зеленой составляющей, поскольку человеческий глаз более чувствителен к зеленому цвету, чем к красному или синему. Порядок следования цветовых составляющих произвольный, а порядок и обработка цветовых составляющих в пиксельном значении разные в различных форматах. Из этого следует, что составляющие 16-битового пиксельного значения могут быть интерпретированы и как (G, В, R), и как (R, G, В), и как (В, R, G). Задание цветов RGB в последовательности (R, G, В) представляется более предпочтительным, поскольку в данном случае цвета упорядочены в соответствии со своими электромагнитными частотами, определяющими их место в физическом спектре.

24-битовые пиксельные значения сохраняются либо в 3 байтах

24 бита = 3 байта = (8 битов, 8 битов, 8 битов) = (R,G,B)

либо в 4 байтах

24 бита = 4 байта = (8 битов, б битов, 8 битов, 8 битов) = (R, G, В, неиспользуемый)

Равномерное распределение памяти для цветовых составляющих модели (один байт на каждую составляющую) является наиболее распространенным.

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