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


  • Mod

    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..


  • Mod

    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


Anmelden zum Antworten