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 ergebnisseUnd 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 ergebnisseUnd wie ist's bei 4bit farben, bzw bei 2?
es ist besser die klammern anders zu setzen
color24 = (( color16 &31 ) *255 /31) ...
bsp:
31bei dir:
31*8= 248besser:
31*255/31=255du würdest also weiterhin das volle spektrum abdecken anstatt nur von 0 bis 248
rapso->greets();