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); }irgendwo muss gestern der Wurm drin gewesen sein.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
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?







Zitieren


Lesezeichen