Farben umrechnen



  • Hallo
    Kann mir jemand sagen, wie ich eine 24bit-Farbe auf eine 16bit-Farbe umrechnen kann?
    Das problem daran ist, dass 16 nicht durch 3 teilbar ist. Bei 24bit-Farben gehört jedem Farbkanal(r,g,b) ein byte(8bit). Wie ist es dann bei 16-bit farben, oder bei 8bit bzw 4bit? Da muss doch Rot, Grün oder Blau ein bit mehr haben, oder?
    Danke für alle Antworten



  • Hi,

    also du meinst bestimmt das 565 - Format.
    Also hat Grün 6 Bits.
    Das ist auch ok so, da das Auge Grüntöne etwas feiner unterscheiden kann.

    Es gibt aber auch 555- Format und ein Bit wird dann "verschenkt".

    Also umrechnen am Besten über Bitshifting nach rechts der drei einzelnen Bytes.
    Also Rot und Blau um 3 Bit nach rechts und Grün 2 Bit.

    Und dann alle über OR alles in ein WORD schreiben.



  • Hi und vielen Dank

    Ich habs so gemacht:
    color24 = (( color16 & 31 ) * (255/31))
    | (((( color16 & (63<<5)) >> 5) * (255/63)) << 8 )
    | (((( color16 & (31<<11)) >> 11) * (255/31)) << 16 );

    Das müsste doch eigentlich gehn, oder?
    Also bei mir gibt's falsche ergebnisse 😞

    Und wie ist's bei 4bit farben, bzw bei 2?



  • Ahhh sorry!
    Des ging doch 🙂



  • K.a schrieb:

    Und wie ist's bei 4bit farben, bzw bei 2?

    Bei <=8 Bit für Farben arbeitet man mit Farbtabellen, d.h. der Bitwert ist ein Index auf eine Tabelle, in der dann der richtige Farbwert drin steht.



  • Und wie ist das z.b. bei X11? Wie kann ich da die farbe richtig umrechnen, ohne XParseColor zu verwenden?



  • K.a schrieb:

    Hi und vielen Dank

    Ich habs so gemacht:
    color24 = (( color16 & 31 ) * (255/31))
    | (((( color16 & (63<<5)) >> 5) * (255/63)) << 8 )
    | (((( color16 & (31<<11)) >> 11) * (255/31)) << 16 );

    Das müsste doch eigentlich gehn, oder?
    Also bei mir gibt's falsche ergebnisse 😞

    Und wie ist's bei 4bit farben, bzw bei 2?

    es ist besser die klammern anders zu setzen

    color24 = (( color16 &31 ) *255 /31) ...
    

    bsp:
    31

    bei dir:
    31*8= 248

    besser:
    31*255/31=255

    du würdest also weiterhin das volle spektrum abdecken anstatt nur von 0 bis 248

    rapso->greets();


Anmelden zum Antworten