Standarde de culoare

Standardul RGB

O culoare poate fi precizată prin ponderea culorilor de bază: r, g, b (red, green, blue). Ponderea fiecărei culori se poate preciza în intervalul [0,1], sau în diferite mulţimi, de ex. {0, 1, ..., 255}.
Vectorul (1,1,1) reprezintă culoarea albă, iar vectorul (0,0,0) este culoarea neagră.
Aceste culori de bază formează un model aditiv pentru construirea culorilor, deoarece ele sunt mixate pentru a produce altă culoare (de exemplu pe ecranul unui calculator, presupunând că fondul este negru). De aici se deduce un cub al culorilor, fiecare culoare de pe ecran are un punct corespunzător în interiorul acestui cub.

Diagonala cubului (cu valori egale pentru fiecare culoare de baza) reprezinta nivelele de gri (de la negru=(0,0,0) la alb=(1,1,1)).

O altă reprezentare a culorilor şi a rezultatului combinaţiei dintre două sau trei culori de bază se vede în figura următoare.

O imagine se poate descompune în trei imagini luând câte o singură componentă de bază din imagine:


Printre proprietăţile unui obiect se poate păstra, alături de culoarea unei feţe, şi un coeficient de transparenţă, numit componenta alpha. La fel ca la culorile de bază, şi acest coeficient are valori în intervalul [0,1], unde 0 reprezintă o transparenţă totală, iar valoarea 1 reprezintă un obiect opac. Prin includerea acestei componente se ajunge la modelul RGBA.

Im modelul RGBA pentru fiecare componentă există un număr de biţi alocaţi pentru fiecare componentă (nu e necesar ca acest număr să fie acelaşi pentru fiecare componentă). Acest număr de biţi determină numărul de valori posibile pentru ponderea unei culori, iar aceste valori corespund unui punct din intervalul [0,1]. Dacă există 8 biţi pentru o componentă, atunci avem valorile 0, 1, ... 255 pe aceşti biţi, care corespund la următoarele valori în intervalul [0,1]: 0/255=0, 1/255, 2/255, ..., 255/255=1. Alte valori din intervalul [0,1] se vor rotunji (aproxima) la aceste valori posibile.

Un calculator poate lucra cu: 8, 16, 24, 32 biţi/pixel. In OpenGL numărul de biţi alocaţi pentru fiecare din culorile de bază se poate afla cu funcţiile:
getBlueBits()
getGreenBits()
getRedBits() 
getAlphaBits()
iar precizarea numărului de biţi pentru componentele necesare se poate face cu funcţiile:
setBlueBits(int blueBits)
setGreenBits(int greenBits)
setRedBits(int redBits) 
setAlphaBits(int alphaBits)
Aceste funcţii sunt din clasa GLCapabilities, pachetul javax.media.opengl.
In OpenGL o culoare se poate preciza prin comana:

Pentru argumente de tip f,d, valorile sunt în intervalul [0,1]. Pentru celelalte tipuri de valori se face o conversie la [0,1], de la o valoare Min (corespunzatoare la 0.0) la o valoare Max (corespunzatoare la 1.0).
SufixMin .. Max
b-128..127
s-32.768..32.767
i-2.147.243.648..2.147.243.647
ub0..255
us0..65.535
ui0..4.294.967.295

Standardul CMY

Din cubul culorilor se observă că în culoarea Y(1,1,0) nu apare culoarea B(0,0,1). La fel avem pentru perechile de culori C(0,1,1) cu R(1,0,0) şi M(1,0,1) cu G(0,1,0). Perechile de culori amintite se numesc culori complementare.
Lumina reflectată de un obiect precizează culoarea lui (în cazul în care sursa de lumină este albă). Pentru ca un obiect să aibă o anumită culoare trebuie să absoarbă complementul acesteia.
Această observaţie se foloseste la imprimantele color, plotere, în pictura: culoarea care se pune pe obiect va absorbi anumite culori şi va reflecta culorile rămase (pentru a completa culoarea sursei).


Astfel, în lumina albă (1,1,1): In acest proces de combinare a culorilor se poate pleca de la culorile C, M, Y. Luând câte un procent din fiecare din aceste culori se poate obţine orice altă culoare (obiectul acoperit cu această culoare va reflecta culoarea respectivă şi va absorbi celelalte culori). In acest fel rezultă un nou cub al culorilor şi un nou standard: CMY. Unele imprimante color de înaltă calitate folosesc procedeul CMYK, prin adăugarea culorii K=(1,1,1)=neagră, deoarece prin combinarea culorilor de bază se poate obţine un gri inchis.

In acest sistem, pe culoarea albă, dacă: