Digitális színkódolás

A számokhoz és karakterekhez hasonlóan a számítógép a színeket is bináris formában tudja tárolni és feldolgozni. Ugyanakkor a karakterkódolástól eltérően, ebben az esetben nem lehet sorszámokra hagyatkozni. A színek különböző tulajdonságait kell számszerűsíteni, hogy aztán azokat kettes számrendszerbe alakítva tudjunk velük dolgozni.

Fény és színek

A fény az elektromágneses sugárzásnak az a hullámhossz tartománya, amit a szem érzékelni képes. Az ember esetében ez a kb. 380-780 nanométer közé eső értékeket jelenti.

Színérzet

A fény hullámhossza meghatározza a hozzá társuló színérzetet. A tartomány alján helyezkedik el az ibolya szín (~380 nm), amit a kék, zöld, sárga, narancs és vörös (~780 nm) követ, ami egyben a skála végpontja is az ember számára. Más állatok esetében ez a tartomány szűkebb vagy tágabb lehet. (Például a rovarok képesek az ultraibolya, a kígyók az infravörös fény érzékelésére, a macskák viszont kevesebb színárnyalatot látnak, mint mi emberek.)

A tárgyak színét az határozza meg, hogy milyen hullámhosszú fényt nyelnek el, és milyet vernek vissza. Például a paradicsom azért piros, mert a benne található likopin pigment a piros színt veri vissza, míg a többit elnyeli. Az egyébként átlátszó víz pedig azért kék nagy tömegben, mert a víz részecskéivel ütköző fényrészecskék (fotonok) közül a nagyobb hullámhosszú, kisebb energiájú vöröses sugarak hamarabb elnyelődnek, míg az alacsonyabb hulláhosszú kékes sugarak a nagyobb energiájuk miatt többször is visszaverődnek, mielőtt végül ők is elnyelődnek.

Színkeverés

A különböző színárnyalatok különböző hullámhosszú fényből tevődnek össze. A színek keverésénél viszont meg kell különböztetni a fényforrásból és a tárgyakról visszaverődő fényt.

Additív Szubsztraktív
Összeadó (balra) és kivonó (jobbra) színkeverés

A fényforrásból érkező különféle hullámhosszú fénysugarak színe összeadódik. Ha a fényforrás egyáltalán nem világít, akkor fekete színt látunk. Ha a fényforrás csak kék és piros fénnyel világít, akkor bíbor (magenta) színt látunk. Ha minden színárnyalat egyforma mennyiségben van jelen, akkor fehér fény alakul ki. Ezt nevezzük összeadó, vagy másnéven additív színkeverésnek.

A tárgyakról visszaverődő fényből azok az árnyalatok kivonódnak, amiket a tárgy elnyel. Ha az adott tárgy minden hullámhosszú fényt visszaver, akkor fehér színűnek látjuk. Ha a tárgy a zöld színt elnyeli, a pirosat és kéket pedig visszaveri, akkor bíbor színűnek látjuk. Ha pedig minden színárnyalatot elnyel, akkor fekete szín alakul ki. Ezt nevezzük kivonó, vagy másnéven szubsztraktív színkeverésnek.

Színkódolás

A színárnyalatok számszerűsítésére sokféle megoldás született. Az alábbiakban a három legelterjedtebb módszerről lesz szó, illetve egy negyedikről, ami ezekre épül.

RGB

Az RGB színmodell azt határozza meg, hogy a kibocsájtott fény milyen arányban tartalmazza a vörös (Red), a zöld (Green) és a kék (Blue) alapszíneket. Az RGB tehát összeadó színkeverésen alapul, amit az informatikában a kijelzőknél és LED fényforrásoknál szoktunk alkalmazni.

A három alapszín mennyiségét hagyományosan egyenként 8 bites számokkal jelöljük. Így a 0 jelenti azt, ha az adott alapszín egyáltalán nem jelenik meg, a 255 pedig azt, ha az adott alapszín maximális mértékben megjelenik. Az rgb(0, 0, 0) a fekete, az rgb(255, 255, 255) a fehér szín kódja. Az így kapott számhármasokból pedig 28×28×28 = 224 = ~16,7 millió különböző színárnyalatot lehet előállítani.

Hexadecimális ábrázolás

Az RGB értékeket át lehet alakítani egy rövidebb formára. A tizes számrendszerben lévő számokat egyesével tizenhatos számrendszerbe kell váltani és egy kettőskereszt karakter után írni. Mivel a nulla minden számrendszerben nulla, a fekete szín kódja a #000000 lesz. A 255 átváltva ff-ként írható fel, így a fehér szín kódja #ffffff lesz. (A kis- és nagybetűs írásmód között nincs különbség.)

RGBA

Egy színárnyalat megadásakor nemcsak annak összetételét, hanem átlátszóságát is meg lehet határozni. Erre szolgál az RGBA jelölés, ahol az A (alfa) érték egy 0.0 és 1.0 közötti tizedes tört. A nulla a teljesen átlátszó, az egy a teljesen átlátszatlan szín. Például az rgba(0, 0, 0, 0.5) az a fekete szín, ami mögött félig látszik a háttér.

HSL

Az RGB színmodellt felfoghatjuk úgy is, mint egy háromdimenziós tér X, Y és Z tengelyeit. Ez a megközelítés viszont az ember számára nehezen átlátható. A számítógépes színpaletták általában ennek egy geometrialilag transzformált verzióját szokták megjelenítni kör vagy kiterített hengerpalást formájában.

HSL színskála
X tengelyen a Hue,
Y tengelyen a Lightness érték

A HSL színmodell szintén három értéket használ a teljes színárnyalat összeállításához, de az RGB-től eltérően nem az alapszínek mennyiségével dolgozik.

  • A Hue, magyarul színárnyalat határozza meg a három alapszín egymáshoz viszonyított arányát. Az értéke 0-tól 360-ig terjedhet. (0°-nál helyezkedik el a vörös, 120°-nál a zöld, 240°-nál a kék, 360°-nál pedig újra a vörös.)
  • A Saturation, magyarul telítettség határozza meg a szín élénkségét. Az értéke 0 és 100 közé eső szám, ahol a 0% szürke, a 100% pedig az a szín, amit a Hue érték meghatároz.
  • A Lightness, magyarul világosság határozza meg a szín világosságát. Az értéke 0 és 100 közé eső szám, ahol a 0% a fekete, a 100% a fehér, az 50% pedig az a szín, amit a Hue és a Saturation együtt meghatároz.

A HSL színmodell az RGB-hez hasonlóan szintén kaphat egy negyedik, alfa értéket, ami az átlátszóság mértékét adja meg.

CMYK

A CMYK színmodell, az előző kettővel ellentétben kivonásos színkeverésen alapul, amit nyomtatásnál használunk. Az RGB-hez hasonlóan az alapszínek mennyiségével dolgozik, de az alapszínei a türkiz (Cyan), a bíbor (Magenta) és a sárga (Yellow). Bár elméletben a három szín egyenlő arányú keverékéből fekete szín jön létre, a gyakorlatban a festékek vegyi összetétele miatt sötétbarna keletkezik, ezért külön fekete (blacK) hozzáadására van szükség.

Az alapszínek mennyiségét százalékos formában szoktuk megadni, ahol a 0% azt jelenti, hogy az adott szín egyáltalán nem található meg, a 100% pedig azt, hogy maximális mennyiségben megtalálható.

A CMYK színmodell gyakorlati alkalmazása miatt az átlátszóságot nem értelmezzük.

Név

Bármelyik modellt is használjuk a fentiek közül, több millió színárnyalatot tudunk előállítani. A gyakorlatban viszont ezeknek csak a töredékét használjuk. A könnyebb kezelhetőség érdekében a különféle színpalettákon általában elnevezik az árnyalatokat. Ezek a színpaletták viszont gyakran nem kompatibilisek egymással.

A hétköznapokban gyakran használt X11/W3C színpaletta kb. 150 színárnyalatot nevesít. Így például a "blue" mindig az rgb(0, 0, 255) árnyalatot jelenti, a "lightblue" pedig az rgb(173, 216, 230) árnyalatot.

Példák

Szürkeárnyalatos (szaturáció: 0%)

Név RGB Hex HSL CMYK Szín
White rgb(255, 255, 255) #ffffff hsl(0, 0%, 100%) cmyk(0%, 0%, 0%, 0%)
Silver rgb(192, 192, 192) #c0c0c0 hsl(0, 0%, 75%) cmyk(0%, 0%, 0%, 25%)
Gray, Grey rgb(128, 128, 128) #808080 hsl(0, 0%, 50%) cmyk(0%, 0%, 0%, 50%)
Black rgb(0, 0, 0) #000000 hsl(0, 0%, 0%) cmyk(0%, 0%, 0%, 100%)

Színes (szaturáció: 100%)

Név RGB Hex HSL CMYK Szín
Red rgb(255, 0, 0) #ff0000 hsl(0, 100%, 50%) cmyk(0%, 100%, 100%, 0%)
Maroon rgb(128, 0, 0) #800000 hsl(0, 100%, 25%) cmyk(0%, 100%, 100%, 50%)
Yellow rgb(255, 255, 0) #ffff00 hsl(60, 100%, 50%) cmyk(0%, 0%, 100%, 0%)
Olive rgb(128, 128, 0) #808000 hsl(60, 100%, 25%) cmyk(0%, 0%, 100%, 50%)
Lime rgb(0, 255, 0) #00ff00 hsl(120, 100%, 50%) cmyk(100%, 0%, 100%, 0%)
Green rgb(0, 128, 0) #008000 hsl(120%, 100%, 25%) cmyk(100%, 0%, 100%, 50%)
Cyan, Aqua rgb(0, 255, 255) #00ffff hsl(180, 100%, 50%) cmyk(100%, 0%, 0%, 0%)
Teal rgb(0, 128, 128) #008080 hsl(180, 100%, 25%) cmyk(100%, 0%, 0%, 50%)
Blue rgb(0, 0, 255) #0000ff hsl(240, 100%, 50%) cmyk(100%, 100%, 0%, 0%)
Navy rgb(0, 0, 128) #000080 hsl(240, 100%, 25%) cmyk(100%, 100%, 0%, 50%)
Magenta, Fuchsia rgb(255, 0, 255) #ff00ff hsl(300, 100%, 50%) cmyk(0%, 100%, 0%, 0%)
Purple rgb(128, 0, 128) #800080 hsl(300, 100%, 25%) cmyk(0%, 100%, 0%, 50%)