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 (00BBGGRRb).
struct RGBColor8
{
unsigned Red :2;
unsigned Green :2;
unsigned Blue :2;
unsigned Zero :2;
};
struct RGBColor24
{
BYTE Red;
BYTE Green;
BYTE Blue;
};
Mit dieser Funktion:
void SetPixel(WORD wX, WORD wY, const struct RGBColor24 *pstrColor)
{
struct RGBColor8 bColor;
BYTE *pbColor;
bColor.Red = pstrColor->Red / 64;
bColor.Green = pstrColor->Green / 64;
bColor.Blue = pstrColor->Blue / 64;
bColor.Zero = 0;
pbColor = &bColor;
pbVGAMemory[wY*320 + wX] = *pbColor;
return;
}
Was ist da falsch? Ich habe es auch schon ohne Bitfelder benutzt, einfach mit Shifts und ANDs und ORs und ADDs, aber nie hat's geklappt. Die 8-bit Farbe hat nie mit der 24-bit übereingestimmt.