RGB nach int
-
Hallo,
ich benutze zur zeit allegro und benötige dort für verschiedene funkionen einen farbwert. der ist als integer verlangt. ich benutzte einen 8bit farbmodus. das heißt 2^8=256 farben. wie bekomme ich es hin, dass ich aus einzelnen farbwerten für rot,blau und grün, so einen integerwert erhalte.
ich hab natürlich das forum durchsucht und das hier gefunden:
inline unsigned int rgb(unsigned char r, unsigned char g, unsigned char b) { return unsigned short(r) >> 8 | g | unsigned short(b) << 8; }
funktioniert aber leider nicht. die farben werden völlig falsch dargestellt.
wie mach ich das am besten?
ciao
-
welches format hat denn der gewünschte farbmodus genau? denn das hast du noch nicht gesagt.
rapso->greets();
-
rapso schrieb:
welches format hat denn der gewünschte farbmodus genau? denn das hast du noch nicht gesagt.
rapso->greets();
8bit? oder verstehe ich deine frage jetzt falsch?
ich mach es momentan mit 24bit und folgender funktion:
... return (unsigned long)b + ((unsigned long)g<<8) + ((unsigned long)r<<16)+((unsigned long)255<<24);
das mit 8bit interessiert mich aber immer noch.
-
Der 256-Farbmodus erstellt eine Palette aus 2^8 RGB-Werten.
Quasi ist der 8 Bit-Wert ein Index auf eine Farbentabelle.
Diese müsstest du mit rgb-Werten füllen.
Quasi sollte sowas wie setrgb(int index, char r, char g, char b) existieren..
-
DocJunioR schrieb:
Der 256-Farbmodus erstellt eine Palette aus 2^8 RGB-Werten
das ist nicht fest definiert, es gibt auch grayscale, R3G3B2 usw als 8bit formate,deswegem wäre es sehr wichtig was er genau für ein output format haben möchte.
rapso->greets();
-
naja gut, aber bei Graustufen ist r=g=b... und das r3g3b2 format ist imho ziemlich selten
-
und das r3g3b2 format ist imho ziemlich selten
...aber nützlich wenn man dem pixelshader kleinere informationen übermitteln muss