Umwandlung 24bit > 6bit

JohnnyEnglish

Grünschnabel
Ich quäle mich gerade mit einem kleinen Stück Code, das in bisher 3 verschiedenen Varianten noch nie funktioniert hat.

Ich möchte eine 24-bit-RGB-Farbe (0xRR, 0xGG, 0xBB) in eine 8-bit(6-bit)-Farbe umwandeln (00BBGGRR binär).

Folgender Code hat nicht funktioniert:

Code:
struct RGBColor24
{
   BYTE Red;
   BYTE Green;
   BYTE Blue;
};

void SetPixel(WORD wX, WORD wY, const struct RGBColor24 *pstrColor)
{
   BYTE bColor;
   bColor = (pstrColor->Red / 64);
   bColor |= (pstrColor->Green / 64) << 2;
   bColor |= (pstrColor->Blue / 64) << 4;
   pbVGAMemory[wY*320 + wX] = bColor;
   return;
}

Input: 3 einzelne Bytes Rot, Grün und Blau
Output (bColor): 1 Byte mit je 2 bit pro Farbe
 
Zuletzt bearbeitet:
Code:
BYTE bColor;

bColor = (BYTE) ( ( (int) pstrColor->Red + (int) pstrColor->Green + (int) pstrColor->Blue ) / 3 );

...

Manchmal ist die Lösung naheliegender als man denkt :-))

BadMourning
 
Äh, Badmourning, kommt da nicht eher so eine Art Mittelwert zwischen R, G und B raus?

JohnnyEnglish, dein Code ist an sich richtig. Hast du denn eine passende Palette gesetzt?
Bei 4 bit pro Farbanteil bleiben auch nicht allzuviele Farbinformationen enthalten, aber das scheint ja gewollt.
 
lol, sorry, habe die Aufgabenstellung nicht richtig verstanden, werde nächstes Mal
genauer lesen.

Endurions Vorschlag, daß du eine Palette benötigst, kann ich mich nur anschließen...

BadMourning
 
Wo genau ist dein Problem bei mir hat der Code funktioniert
aus 0x00FFFFFF wurde 0x3F entspricht 00111111b
 
Zurück