lördag 21 mars 2015

Färger i datorer

Under knappt hälften av den tid vi haft datorer, har dessa varit oförmögna att visa färggrafik. De har presenterat sitt utdata med tända eller släckta bildelement. De första datorerna hade ingen bildskärm alls. Datamaskinen ENIAC (1946) levererade sitt utdata i form av hål i pappskivor, och en av de första hemdatorerna, Altair 8800 (1974), hade några röda lysdioder. Rätt snabbt ansåg man att den mest effektiva metoden att presentera utdata var att visa "tecken" på en tv-skärm, som t.ex. Commodore PET (1977) gjorde. En svart skärm visade 40 x 25 gröna tecken som byggdes av 8 x 8 bildelement (pixlar), alltså 64 punkter per tecken och 320 x 200 punkter totalt. Datorer med bildskärm var alltså som regel monokroma på 70-talet, vilket betyder att de skiljer på tända eller släckta bildelement utan att lägga någon annan aspekt i bildelementens färg. Grafiken kostade bara en bit per pixel, alltså 8 kilobytes totalt (320 x 200 / 8 = 8000).

År 1980 fick vi uppleva den första hemdatorn som kunde visa grafik i färg - TRS-80 Color Computer 1. Just färgen var så pass viktig att själva operativsystemet, en BASIC-interpretator, fick namnet Color BASIC 1.0. Om det är tillåtet att uttrycka sig i moderna mått: Datorn var utrustad med en processor på knappt 0,0009 gigahertz, vilket är klent jämfört med dagens mobiltelefoner som klarar kring 2,0 gigahertz (iPhone 6 har en processor på 1,6 GHz och Nokia Lumia 930 har en processor på 2,2 GHz). TRS-80 var utrustad med ett minne på 0,000004 GB (vilket kan jämföras med dagens standard på 8 GB) och den var helt utan sekundär lagring, vilket idag kan handla om hårddiskar på terabytes.

Personligen stannade jag vid monokroma datorer ganska länge. Jag gick från Sinclair ZX81 till Luxor ABC80. När mina vänner började använda Vic 20, Sinclair Spectrum och Commodore 64, så harvade jag vidare med min ZX81 ända fram till år 1986 då jag fick tillgång till en Commodore 128 med en 1571:a som sekundär lagringsenhet, vilket både innebar att jag kunde avbryta mitt arbete på kvällen, och återuppta gårdagens arbete dagen efter, genom att återkalla det från sekundärminnet.

På den tiden använde man alltså en bit per bildelement. Varje bildelement (eller pixel) utgör en punkt i den matris som utgör skärmbilden, och varje bildelement beskrevs av en bit. Commodore 64 hade en palett av på 16 olika färger, men en bild på 200 x 320 pixlar kunde bara visa två av dessa färger: En förgrundsfärg och en bakgrundsfärg. Varje bildelement kunde fortfarande bara vara tänt eller släckt. Men C64:an hade dessutom ett flerfärgsläge.

Genom att para ihop två pixlar, fick man helt plötsligt två bitar per pixel. Förvisso var dessa pixlar större, vilket gjorde att grafiken blev kantigare, men nu kunde varje pixel (totalt 160 x 200 avlånga pixlar) beskriva ett värde av fyra tillgängliga (00, 01, 10 eller 11) istället för bara 0 eller 1. Därmed kunde C64 visa fyra av sina 16 färger på skärmen, om än på bekostnad av antalet pixlar. De fyra färgerna valdes från listan av 16 tillgängliga färger.

Sedan har datorerna succesivt utrustats med mer grafikminne och större färgpalett. På 90-talet fanns persondatorer som med nästan fem gånger så hög upplösning (640 x 480 pixlar) kunde 256 färger ur en palett på 16,8 miljoner färger, vilket kräver 1 megabyte grafikminne. Varje pixel beskrevs av en byte istället för en bit, och varje byte var en referens till en palett.

Idag har man dels betydligt fler bildelement på skärmen, och dessutom kostar man på sig hela tre bytes per bildelement. Detta ger oss 24 bitar per pixel, vilket ger oss möjlighet att ha 16,8 miljoner kombinationer av tända och släckta bitar per pixel. Därmed har vi eliminerat behovet av att ha en palett att hänvisa till - varje pixel kan beskriva en färg istället för bara en position i en palett, där de första 8 bitarna av 28 beskriver färgens röda del, de nästa 8 beskriver färgens gröna del och de sista 8 beskriver färgens blå del. Utifrån dessa tre färger kan vi få fram alla tänkbara färger genom additiv färgblandning.

Att förstå additiv färgblandning är enkelt om man tänker sig att man befinner sig i ett vitt rum utan fönster eller belysning. Trots att rummet är vitt så ser vi bara svart, eftersom inget ljus kommer in i våra ögon. Men om du lyser med en röd ficklampa på den vita väggen, kommer åtminstone rött ljus att komma in i dina ögon. Den vita väggen reflekterar alla frekvenser, och eftersom endast rött ljus strålar mot väggen, är det endast rött ljus som kommer in i våra ögon. Men om vi samtidigt lyser med en grön ficklampa på samma punkt på väggen, kommer både röda och gröna strålar att reflekteras från väggen, vilket vi uppfattar som gul färg.

Om vi låter varje pixel beskriva sin egen färg, men tänker oss att varje pixel endast består av tre bitar där den första representerar röd, den andra grön och den tredje blå, kan vi visa åtta olika färger.
000 skulle vara svart, eftersom ingen av färgerna lyser.

100 skulle ge röd färg, eftersom den första representerar röd. Av samma skäl skulle 010 vara grön och 001 vara blå.


Om vi istället för tre bitar (en per grundfärg) skulle ha sex bitar per pixel (två per grundfärg), behöver inte röd bara vara tänd eller släkt (0 eller 1). Nu kan vi säga att 00 betyder släckt, 01 betyder 33% röd, 10 betyder 67% röd och 11 betyder 100% röd.


Detta öppnar som synes för möjligheten att visa mörkröd, du kan nu skapa ljusröd (eller rosa) genom att visa mycket röd och lite grön och blå. Vi kan visa lite av alla färger och få grå, vi kan visa en färg som är på väg att bli lila utan att bara fullt lila. Vi kan även visa lite av varje färg, med övervikt på grön för att få en grågrön nyans.


Ju fler bitar vi avsätter för varje pixel, desto fler färger kan vi visa, men minnesåtgången blir såklart större. Och någonstans vid åtta bitar per färg, alltså 24 bitar, finns en bra kompromiss mellan minnesåtgång och bra återgivning. Det kan finnas anledningar att avsätta ännu fler bitar per pixel för den som vill göra avancerade manipulationer som drar ner bildens kvalité, så att man har en bild som tål att tappa kvalité utan att betraktaren märker något, men då drar man oftast ner bilden till 24 bitar när bilden är färdigmanipulerad och ska betraktas.

Inga kommentarer:

Skicka en kommentar