CBitmap mit Farbe füllen
-
Ahoi!
Ich hab eine Funktion geschrieben die ein Bitmap - enthalten in einem CBitmap Object - mit einer beliebigen Farbe füllt.
Hier isse:bool SYS4QUER::SetBitmapColor(CBitmap *pBitmap, COLORREF cColor) { int nByte1 = GetRValue(cColor); int nByte2 = GetGValue(cColor); int nByte3 = GetBValue(cColor); if (pBitmap == NULL || nByte1 < 0 || nByte2 < 0 || nByte3 < 0) return false; BITMAP BmpData; pBitmap->GetBitmap(&BmpData); int nPixelBytes = 3; long int nSize = BmpData.bmWidth * BmpData.bmHeight * nPixelBytes; BYTE* pData = new BYTE[nSize]; long int nOffset = 0; for (nOffset = 0; nOffset < nSize; nOffset+= nPixelBytes) { pData[nOffset] = nByte3; // <= 8 Bit pData[nOffset + 1] = nByte2; pData[nOffset + 2] = nByte1; pData[nOffset + 3] = 0; } pBitmap->SetBitmapBits(nSize, pData); delete[] pData; return true; }
Das ganze klappt auch, wenn meine Desktop-Farbtiefe 32Bit (True Color) beträgt.
Setze ich jetzt die Farbtiefe herab, wird die Farbe leider falsch gesetzt(Bei Rot füllt er z.B in so nem hässlichen Grau-Blau Ton)
Woran liegt das ?Wie bekomm ich das in den Griff ?
Die Farbtiefe des Bitmap beträgt 8Bit also 256 Farben, trotzdem will Windows für das Bitmap IMMER ein 32Bit Array (pData) - Liegt dort vielleicht der Fehler ?