Code:Das mit dem Konvertieren der Farben ist so eine Sache, das kann man machen, es kommt aber nicht unbedingt das gewünschte Ergebnis heraus. Da die Farbgewichtung auch eine Rolle spielt. Ohne das weiter kompliziert zu machen, kommt es bei der einfachen Farbanpassung per Logikoperatoren teils zu falschen Farbdarstellungen beim Ziel. Das sollte man nur mal so im Hinterkopf haben. Ansonsten ist RGB-5-6-5, 5Bit für Rot, 6Bit für Grün und 5Bit für Blau. Bei RGB-8-8-8, jeweils 8Bit für eine Farbe. RGB 8-8-8: 11111111-11111111-11111111 RGB 5-6-5: xxx11111-xx111111-xxx11111 Schiebe die ersten 8 Bit nach rechts, um 3 Stellen. Schiebe die zweiten 8 Bit nach rechts, um 2 Stellen. Schiebe die dritten 8 Bit nach rechts, um 3 Stellen. int rot1 = rot/8; int gruen1 = gruen/4; int blau1 = blau/8; Das Problem dabei: Grün ist anders gewichtet, das kann sich in einem Grünstich des Bildes bemerkbar machen. Rückwärts geht es genau andersrum: Schiebe die ersten 5 Bit nach links, um 3 Stellen. Schiebe die zweiten 6 Bit nach links, um 2 Stellen. Schiebe die dritten 5 Bit nach links, um 3 Stellen. int rot = rot1*8; int gruen = gruen1*4; int blau = blau1*8; -------------------------- Die einzelnen Farben aus rgb-8-8-8 nach rgb-5-6-5: r = rgb888/524288; g = (rgb888/1024)&63; b = (rgb888/8)&31; Ganze RGB-Werte umrechnen: rgb565 = (( ((rgb888/524288)*64) | ((rgb888/1024)&63) )*32) | ((rgb888/8)&31); 10111000 10101100 10101000 => ((1472 | 43) * 32) | 21 => 1011110101110101 und zurück (als Probe): rgb888 = ((rgb565 & 63488) * 256) | ((rgb565 & 2016) * 32) | ((rgb565 & 31) * 8) 1011110101110101 => (12058624 | 44032) | 168 => 10111000 10101100 10101000
Lesezeichen