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

Примеры палитр

Рассмотрим несколько примеров палитр. Простейшей является двухцветная или монохромная, палитра:

/* BYTE - 8-битовый символ */

typedef struct_MonoPalette

{

BYTE color[2] ;

} MONO_PALETTE;

MONO_PALETTE Mono = { {0х00, 0х01} };

В этом примере двухэлементный массив содержит цветовые величины 0х00 и 0х01 в элементах 0 и 1 соответственно. Все пиксельные значения в файле являются индексами. Пиксель со значением 0 рассматривается как индекс цвета, представленного значением 0х00. Аналогично пиксель со значением 1 рассматривается как индекс цвета, заданного значением 0х01. Поскольку в данном случае растр состоит только из двух цветов и цвет каждого пикселя может быть представлен 1 битом, то удобнее сохранять эти значения непосредственно в растре в виде битовых величин. Это действительно проще, однако некоторые форматы ориентированы только на применение палитр и поэтому требуют, чтобы таковые имелись даже для монохромных растров.

В следующем примере рассмотрим 16-элементную палитру, используемую в качестве полутоновой:

/* BYTE — это 8-Оитовый символ */

typedef struct_GrayPalette

{

BYTE Color[16) ;

} GRAY_PALETTE;

GRAY_PALETTE Gray =

{

{0х00,

0х14,

0х20,

0х2с,

0х38,

0х45,

0х51,

0х61,

0х71,

0х82,

0х92,

0ха2,

0xb6,

0xcb,

0хеЗ,

0xff}

};

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

typedef struct _RGB

{

BYTE Red; /*3начение красного канала*/

BYTE Green; /*3начение зеленого канала*/

BYTE Blue; /*3начение синего канала*/

} RGB;

RGB Gray[16] =

{

(0х00, 0х00, 0х00),

(0х14, 0х14, 0х141,

(0х20, 0х20, 0х20),

(0х2с, 0х2с, 0х2с),

(0х38, 0х38, 0х38),

(0х45, 0х45, 0х45),

(0х51, 0х51, 0х51),

(0х61, 0х61, 0х61),

(0х71, 0х71, 0х71),

(0х82, 0х82, 0х82),

(0х92, 0х92, 0х92),

(0ха2, 0ха2, 0ха2),

(0xb6, 0xb6, 0xb6),

(0xcb, 0xcb, 0xcb),

(0хе3, 0хе3, 0хе3),

(0xff, 0xff, 0xff)

};

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

TYPEDEF struct _PlanePalette

{

BYTE Redt16]; /* Значение красной плоскости */

BYTE Green[161; /* Значение зеленой плоскости */

BYTE Blue[16]; /* Значение синей плоскости */

} PLANE_PALETTE;

PLANE_PALETTE Planes =

{

(0х00, 0х14, 0х20, 0х2с, 0х38, 0х45, 0х51, 0х61, /* Красная плоскость */

0х71, 0х82, 0х92, 0ха2, 0xb6, 0xcb, 0хеЗ, 0xff),

(0х00, 0х14, 0х20, 0х2с, 0х38, 0х45, 0х51, 0х61, /* Зеленая плоскость */

0х71, 0х82, 0х92, 0ха2, 0xb6, 0xcb, 0хеЗ, 0xff),

(0х00, 0х14, 0х20, 0х2с, 0х38, 0х45, 0х51, 0х61, /* Синяя плоскость */

0х71, 0х82, 0х92, 0ха2, 0xb6, 0xcb, 0хеЗ, 0xff)

};

И, наконец, еще один пример — широко используемая палитра IBM VGA. Эта 256-цветная палитра состоит из встроенной 16-цветной палитры EGA, 16-элементной полутоновой палитры и 24-цветной палитры с девятью вариантами насыщенности и интенсивности для каждого цвета. Обратите внимание на то, что последние восемь элементов не используются и, следовательно, имеют нулевое значение:

struct _VgaPalette

{

BYTE Red;

BYTE Green;

BYTE Blue;

} VGA_PALETTE;

VGA_PALETTE VgaColors[256] =

{

/* EGA Color Table */

(0х00

0х00

0х00)

(0х00

0х00

0хаа)

(0х00

0хаа

0х00)

(0х00

0хаа

0хаа)

(0хаа

0х00

0х00)

(0хаа

0х00

0хаа)

(0хаа

0х55

0х00)

(0хаа

0хаа

0хаа)

(0х55

0х55

0х55)

(0х55

0х55

0xff)

(0х55

0xff

0х55)

(0х55

0xff

0xff)

(0xff

0х55

0х55)

(0xff

0х55

0xff)

(0xff

0xff

0х55)

(0xff

0xff

0xff)

/* Gray Scale Table */

(0х00

0х00

0х00)

(0х14

0х14

0х14)

(0х20

0х20

0х20)

(0х2с

0х2с

0х2с)

(0х38

0х38

0х38)

(0х45

0х45

0х45)

(0х51

0х51

0х51)

(0х61

0х61

0х61)

(0х71

0х71

0х71)

(0х82

0х82

0х82)

(0х92

0х92

0х92)

(0ха2

0ха2

0ха2)

(0xb6

0xb6

0xb6)

(0xcb

0xcb

0xcb)

(0хе3

0хе3

0хе3)

(0xff

0xff

0xff)

/* 24-color Table */

(0х00

0х00

0xff)

(0х41

0х00

0xff)

(0x7d

0х00

0xff)

(0xbe

0х00

0xff)

(0xff

0х00

0xff)

(0xff

0х00

0xbe)

(0xff

0х00

0x7d)

(0xff

0х00

0х41)

(0xff

0х00

0х00)

l0xff

0х41

0х00)

(0xff

0x7d

0х00)

(0xff

0xbe

0х00)

(0xff

0xff

0х00)

(0xbe

0xff

0х00)

(0x7d

0xff

0х00)

(0х41

0xff

0х00)

(0х00,

0xff,

0х00),

(0х00,

0xff,

0х41),

(0х00,

0xff,

0x7d),

(0х00,

0xff,

0xbe),

(0х00,

0xff,

0xff),

(0х00,

0xbe,

0xff),

(0х00,

0x7d,

0xff),

(0х00,

0х41,

0xff),

(0x7d,

0x7d,

0xff),

(0х9е,

0x7d,

0xff),

(0хЬе,

0x7d,

0xff),

(0xdf,

0x7d,

0xff),

(0xff,

0x7d,

0xff),

(0xff,

0x7d,

0xdf),

(0xff,

0x7d,

0xbe),

(0xff,

0x7d,

0х9е),

(0xff,

0x7d,

0x7d),

(0xff,

0х9е,

0x7d),

(0xff,

0xbe,

0x7d),

(0xff,

0xdf,

0x7d),

(0xff,

0xff,

0x7d),

(0xdf,

0xff,

0x7dl,

(0xbe,

0xff,

0x7d),

(0х9е,

0xff,

0x7d),

(0x7d,

0xff,

0x7d),

(0x7d,

0xff,

0х9е),

(0x7d,

0xff,

0xbe),

(0x7d,

0xff,

0xdf),

(0x7d,

0xff,

0xff),

(0x7d,

0xdf,

0xff),

(0x7d,

0xbe,

0xff),

(0x7d,

0х9е,

0xff),

(0xb6,

0xb6,

0xff),

(0хс7,

0xb6,

0xff),

(0xdb,

0xb6,

0xff),

(0xeb,

0xb6,

0xff),

(0xff,

0xb6,

0xff),

(0xff,

0xb6,

0xeb),

(0xff,

0xb6,

0xdb),

(0xff,

0xb6,

0хс7),

(0xff,

0xb6,

0xb6),

(0xff,

0хс7,

0xb6),

(0xff,

0xdb,

0xb6),

(0xff,

0xeb,

0xb6),

(0xff,

0xff,

0xb6),

(0xeb,

0xff,

0xb6),

(0xdb,

0xff,

0xb6),

(0хс7,

0xff,

0xb6),

(0xb6,

0xdf,

0xb6),

(0xb6,

0xff,

0хс7),

(0xb6,

0xff,

0xdb),

(0xb6,

0xff,

0xeb),

(0xb6,

0xff,

0xff),

(0xb6,

0xeb,

0xff),

(0xb6,

0xdb,

0xff),

(0xb6,

0хс7,

0xff),

(0х00,

0х00,

0х71),

(0xic,

0х00,

0х71),

(0х38,

0х00,

0х71),

(0х55,

0х00,

0х71),

(0х71,

0х00,

0х71),

(0х71,

0х00,

0х55),

(0х71,

0х00,

0х38),

(0х71,

0х00,

0xic),

(0х71,

0х00,

0х00),

(0х71,

0xic,

0х00),

(0х71,

0х38,

0х00),

(0х71,

0х55,

0х00),

(0х71,

0х71,

0х00),

(0х55,

0х71,

0х00),

(0х38,

0х71,

0х00),

(0xic,

0х71,

0х00),

(0х00,

0х71,

0х00),

(0х00,

0х71,

0xic),

(0х00,

0х71,

0х38),

(0х00,

0х71,

0х55),

(0х00,

0х71,

0х71),

(0х00,

0х55,

0х71),

(0х00,

0х38,

0х71),

(0х00,

0xic,

0х71),

(0х38,

0х38,

0х71),

(0х45,

0х38,

0х71),

(0х55,

0х38,

0х71),

(0х61,

0х38,

0х71),

(0х71,

0х38,

0х71),

(0х71,

0х38,

0х61),

(0х71,

0х38,

0х55),

(0х71,

0х38,

0х45),

(0х71,

0х38,

0х38),

(0х71,

0х45,

0х38),

(0х71,

0х55,

0х38),

(0х71,

0х61,

0х38),

(0х71,

0х71,

0х38),

(0х61,

0х71,

0х38),

(0х55,

0х71,

0х38),

(0х45,

0х71,

0х38),

(0х38,

0х71,

0х38),

10х38,

0х71,

0х45),

(0х38,

0х71,

0х55),

(0х38,

0х71,

0х61),

(0х38,

0х71,

0х71),

(0х38,

0х61,

0х71),

(0х38,

0х55,

0х71),

(0х38,

0х45,

0х71),

(0х51,

0х51,

0х71),

(0х59,

0х51,

0х71),

(0х61,

0х51,

0х71),

(0х69,

0х51,

0х71),

(0х71,

0х51,

0х71),

(0х71,

0х51,

0х69),

(0х71,

0х51,

0х61),

(0х71,

0х51,

0х59),

(0х71,

0х51,

0х51),

(0х71,

0х59,

0х51),

(0х71,

0х61,

0х51),

(0х71,

0х69,

0х51),

(0х71,

0х71,

0х51),

(0х69,

0х71,

0х51),

(0х61,

0х71,

0х51),

(0х59,

0х71,

0х51),

(0х51,

0х71,

0х51),

(0х51,

0х71,

0х59),

(0х51,

0х71,

0х61),

(0х51,

0х71,

0х69),

(0х51,

0х71,

0х71),

(0х51,

0х69,

0х71),

(0х51,

0х61,

0х71),

(0х51,

0х59,

0х71),

(0х00,

0х00,

0х41),

(0х10,

0х00,

0х41),

(0х20,

0х00,

0х41),

(0х30,

0х00,

0х41),

(0х41,

0х00,

0х41),

(0х41.,

0х00,

0х30),

(0х41,

0х00,

0х20),

(0х41,

0х00,

0х10),

(0х41,

0х00,

0х00),

(0х41,

0х10,

0х00),

(0х41,

0х20,

0х00),

(0х41,

0х30,

0х00),

(0х41,

0х41,

0х00),

(0х30,

0х41,

0х00),

(0х20,

0х41,

0х00),

(0х10,

0х41,

0х00),

(0х00,

0х41,

0х00),

(0х00,

0х41,

0х10),

(0х00,

0х41,

0х20),

(0х00,

0х41,

0х30),

(0х00,

0х41,

0х41),

(0х00,

0х30,

0х41),

(0х00,

0х20,

0х41),

(0х00,

0х10,

0х41),

(0х20,

0х20,

0х41),

(0х28,

0х20,

0х41),

(0х30,

0х20,

0х41),

(0х38,

0х20,

0х41),

(0х41,

0х20,

0х41),

(0х41,

0х20,

0х38),

(0х41,

0х20,

0х30),

(0х41,

0х20,

0х28),

(0х41,

0х20,

0х20),

(0х41,

0х28,

0х20),

(0х41,

0х30,

0х20),

(0х41,

0х38,

0х20),

(0х41,

0х41,

0х20),

(0х38,

0х41,

0х20),

(0х30,

0х41,

0х20),

(0х28,

0х41,

0х20),

(0х20,

0х41,

0х20),

(0х20,

0х41,

0х28),

(0х20,

0х41,

0х30),

(0х20,

0х41,

0х38),

(0х20,

0х41,

0х41),

(0х20,

0х38,

0х41),

(0х20,

0х30,

0х41),

(0х20,

0х28,

0х41),

(0х2с,

0х2с,

0х41),

(0х30,

0х2с,

0х41),

(0х34,

0х2с,

0х41),

(0хЗс,

0х2с,

0х41),

(0х41,

0х2с,

0х41),

(0х41,

0х2с,

0хЗс),

(0х41,

0х2с,

0х34),

(0х41,

0х2с,

0х30),

(0х41,

0х2с,

0х2с},

(0х41,

0х30,

0х2с),

(0х41,

0х34,

0х2с),

(0х41,

0хЗс,

0х2с),

(0х41,

0х41,

0х2с},

(0хЗс,

0х41,

0х2с),

(0х34,

0х41,

0х2с),

(0х30,

0х41,

0х2с),

(0х2с,

0х41,

0х2с),

(0х2с,

0х41,

0х30),

(0х2с,

0х41,

0х34),

(0х2с,

0х41,

0хЗс),

(0х2с,

0х41,

0х41),

(0х2с,

0хЗс,

0х41),

(0х2с,

0х34,

0х41),

(0х2с,

0х30,

0х41),

(0х00,

0х00,

0х00),

(0х00,

0х00,

0х00),

(0х00,

0х00,

0х00),

(0х00,

0х00,

0х00),

(0х00,

0х00,

0х00),

(0х00,

0х00,

0х00),

(0х00,

0х00,

0х00),

(0х00,

0х00,

0х00),

};

Цвет

Рецепторы человеческого глаза могут воспринимать световое излучение в диапазоне длин волн от 380 до 770 нанометров. Теоретически, глаз может воспринимать одновременно около 10 тысяч различных цветов (хотя, как вы понимаете, общее количество воспринимаемых цветов намного больше).

Волны различной длины воспринимаются глазом по-разному. Наиболее чувствителен он к зеленому цвету, затем следует красный, а затем — синий. Кроме того, система визуального восприятия легче различает близко расположенные цвета, чем отдаленные, особенно если они разделены видимым объектом. Следует учитывать и тот факт, что возможность различать цвета очень индивидуальна; установлено, что один человек из дюжины страдает какими-либо нарушениями цветовосприятия.

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

Для восприятия цвета важное значение имеет и то, как этот цвет получен. 0бычно мы ассоциируем цвет с излучением определенной, длины волны. 0днако известно, что при смешивании двух и более цветов образуется новый цвет. Например, при смешивании зеленого и красного цветов образуется желтый, а при смешивании желтого и синего — зеленый. Такое же смешивание цветов происходит при освещении окрашенного объекта — цвет объекта всегда смешивается с цветом света, образуя третий цвет. Синий объект, освещенный белым светом, кажется голубым, а под воздействием красного освещения тот же объект становится фиолетовым.

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

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

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

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

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