MILC logo

IndexVorigeVolgendeLeeg

RGB <> YJK
Alex Wulms, 00-00-00


    
(Ik heb deze tekst eens van Alex Wulms gekregen, als reaktie op een vraag van 
 mij - Roderik Muit)

4 horizontale pixels zijn in screen 12 als volgt gecodeerd:

      |C7 C6 C5 C4 C3|C2 C1 C0|
------+--------------+--------+
1 dot |     Y1       |   Kl   |
1 dot |     Y2       |   Kh   |
1 dot |     Y3       |   Jl   |
1 dot |     Y4       |   Jh   |
------+--------------+--------+

K = KhKl is een 6-bits 2 complement getal
J = JhJl is een 6-bits 2 complement getal
Y1..Y4  zijn 5-bits unsigned getallen

K en J zijn dus getallen met een sign (bit 6 is het sign bit). Dit
houdt dus in dat de volgende conventie wordt gebruikt:
K = 32  -> -32 wordt bedoeld
K = 33  -> -31 wordt bedoeld
.    .  .   .   .       .
K = 63  -> -1  wordt bedoeld
K =  0  ->  0  wordt bedoeld
K =  1  ->  1  wordt bedoeld
.    .  .   .   .       .
K = 31  -> 31  wordt bedoeld
Dezelfde conventie wordt bij J gebruikt.
In basic kan daarom de volgende 'conversie' formule worden gebruikt
(om 6-bits 2-complement om te zetten in 16 bits 2-complement ofwel
integers):

if k>32 then k=k-64

En op de Z80 (in assembler, neem aan: K zit in de Accu)
mk8bits:    cp  32      ; is het getal positief ?
            ret c       ; ja => alles is goed
            sub 64      ; nee => zet om in 8-bits 2-complement
            ret

Als je dit eenmaal hebt, kun je de volgende formules gebruiken:
-Voor conversie van YJK naar RGB:

R = Y+J
G = Y+K
B = (5/4)*Y - (J/2) - (K/4)

Let op: R, G en B zijn in principe allemaal 5 bits. De uitkomsten
kunnen echter te groot of te klein worden! Daarom dient hierop
gecontroleerd te worden. Dit kan bijvoorbeeld als volgt (in basic):
if r>31 then r=31 else if r<0 then r=0
if g>31 then g=31 else if g<0 then g=0
if b>31 then b=31 else if b<0 then b=0

-Voor de conversie van RGB naar YJK

Y = B/2 + R/4 + G/8
J = R - Y    (= (3/4)*R - B/2 - G/8, dus hier zit alles in gecodeerd)
K = G - Y    (= (7/8)*G - B-2 - R/4, dus ook hier zit alles in)

In J en K zit dus alles (R, G em B) gecodeerd, alleen in andere verhoudingen!!


    

Index

Vorige

Volgende