Gå til innhold

Anbefalte innlegg

Hei

 

Jeg looper igjennom et RGB bilde med pekere. Når jeg går igjennom hvert enkelt pixel så ønsker jeg å konvertere pixlene til YCbCr fargerommet, men hvordan skal jeg lagre disse verdiene slik at jeg får et YCbCr bilde til slutt?

 

Jeg ser at PixelFormat ikke har støtte for YCbCr formatet, er det allikevel en måte å gå rundt dette på?

Fant fint lite om dette på nettet...

Lenke til kommentar
Videoannonse
Annonse
Hei

 

Jeg looper igjennom et RGB bilde med pekere. Når jeg går igjennom hvert enkelt pixel så ønsker jeg å konvertere pixlene til YCbCr fargerommet, men hvordan skal jeg lagre disse verdiene slik at jeg får et YCbCr bilde til slutt?

 

Jeg ser at PixelFormat ikke har støtte for YCbCr formatet, er det allikevel en måte å gå rundt dette på?

Fant fint lite om dette på nettet...

Du kan lagre de som tre float/double-verdier for hver pixel f.eks. For å finne disse YCbCr flyttallene må du gange hver enkel R, G og B med en konstant, se her: http://en.wikipedia.org/wiki/YCbCr

 

YCbCr (601) from "digital 8-bit R'G'B' "

========================================================================

Y' = 16 + 1/256 * ( 65.738 * R'd + 129.057 * G'd + 25.064 * B'd)

Cb = 128 + 1/256 * ( - 37.945 * R'd - 74.494 * G'd + 112.439 * B'd)

Cr = 128 + 1/256 * ( 112.439 * R'd - 94.154 * G'd - 18.285 * B'd)

........................................................................

R'd, G'd, B'd in {0, 1, 2, ..., 255}

Y' in {16, 17, ..., 235}

with footroom in {1, 2, ..., 15}

headroom in {236, 237, ..., 254}

sync. in {0, 255}

Cb, Cr in {16, 17, ..., 240}

Her er R', G' og B' lik 1/R, 1/G, 1/B..

 

Men hvis du vil vise fargene på skjermen må du konvertere tilbake til RGB igjen for det er fargerommet datamaskiner bruker. Så det gir ikke mening å konvertere til YCbCr hvis det ikke er noe du skal gjøre som er lettere i YCbCr-fargerommet, som f.eks 4:2:2 sub-sampling for å komprimere dataene eller noe. Hvorfor vil du ha dataene i YCbCr?

Endret av teflonpanne
Lenke til kommentar

GDI+ støtter kun RGB(A)32 bit pixel format; etter det jeg har forstått konverteres alle bilder til dette når de lastes.

 

Eventuelt kan du prøve å bruke Direct3D eller OpenGL til å vise grafikken, der kan du i det minste få til dette med en shader.

 

Men hvis det er et steg for langt utifra hva du hadde tiltenkt å bruke programmet til, så kan du eventuelt bare lage to bilder, en RGB og en YCbCr.

Lenke til kommentar
  • 4 uker senere...

takk for svar. Jeg hadde tenkt å foreta noen operasjoner på bildet i YCbCr, og underveis i utviklingen er det lettere å se resultatet underveis i YCbCr.

 

Man må vel bare gå fram og tilbake mellom RGB -> YCbCr -> RGB for å se dette da. får prøve meg fram:)

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...