hi,
ich sehe schon, da sind 2 bitakrobatikspezialisten unter sich...
für mich ist das zu hoch oder besser: zu low-level.
Immerhin:
ES GEHT!
(@moppi: mit deinem letzten Code)
Code:
uint16_t ColorRGB216bit(uint16_t R, uint16_t G, uint16_t B) {
return (R>>3<<11) | (G>>2<<5) | (B>>3);
}
void Color16bit2colorRGB(uint16_t color16, uint16_t &R, uint16_t &G, uint16_t &B) {
R = (uint8_t) (color16 >> 11) << 3;
G = (uint8_t)((color16 & 2016) >> 3);
B = (uint8_t) (color16 & 31) << 3;
Serial.println("");
Serial.println("Unterprogramm color16 zu RGB:");
Serial.println( (String)"color16="+(String)color16);
Serial.println( (String)"R="+(String)R);
Serial.println( (String)"G="+(String)G);
Serial.println( (String)"B="+(String)B);
}
Code:
Hauptprogramm vor Aufruf:
col16=0
r=255
g=102
b=78
Hauptprogramm nach rgb zu col16-Berechnung (rgb gelöscht):
col16=64297
r=0
g=0
b=0
Unterprogramm color16 zu RGB:
color16=64297
R=248
G=100
B=72
Hauptprogramm nach col16 zu rgb:
col16=64297
r=248
g=100
b=72
irgendwo muss gestern der Wurm drin gewesen sein.
Vielen herzlichen Dank! (y)
Zum Verständnis noch 1 Frage:
ein r=255 Wert wird ja zu r=248, das liegt ja an der kleineren 5bit-Codierbreite.
Kann man das bei der Rückumwandlung wieder sinnvoll auf 255 hochskalieren, also runden, analog auch für die mittleren 6bit Werte?
Lesezeichen