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 ?


Anmelden zum Antworten