Ein Farb-Bitmap in ein Graustufen-Bitmap umwandeln

void __fastcall TMainForm::TestBtnClick(TObject *Sender)
{
    PRGBTriple srcRow;
    int iHeight = Image->Picture->Bitmap->Height;
    int iWidth = Image->Picture->Bitmap->Width;
    int r, g, b, gray;

    // überprüfen, ob ein 24Bit Bild vorliegt
    if (Image->Picture->Bitmap->PixelFormat == pf24bit)
    {
        try
        {
            // Bild in y-Richtung durchlaufen
            for (int ySrc = 0; ySrc<iHeight; ySrc++)
            {
                // Scanline holen
                srcRow = (PRGBTriple)Image->Picture->Bitmap->ScanLine[ySrc];

                // Scanline durchlaufen (x-Richtung)
                for (int xSrc = 0; xSrc < iWidth; xSrc++)
                {
                    // r,g,b auslesen und mit einem genormten Faktor in die entsprechende Helligkeit umrechen
                    r = 0.299 * srcRow&#91;xSrc&#93;.rgbtRed;
                    g = 0.587 * srcRow&#91;xSrc&#93;.rgbtGreen;
                    b = 0.114 * srcRow&#91;xSrc&#93;.rgbtBlue;

                    gray = r + g + b; // Grauwert ausrechnen

                    // Grauwerte setzen
                    srcRow&#91;xSrc&#93;.rgbtRed = gray;
                    srcRow&#91;xSrc&#93;.rgbtGreen = gray;
                    srcRow&#91;xSrc&#93;.rgbtBlue = gray;
                }
            }
        }
        catch ( Exception &amp;E )
        {
            MessageDlg(E.Message, mtError, TMsgDlgButtons() << mbOK, 0);
        }
    }
    else MessageDlg(&quot;Das Bild muss ein Bitmap mit 24Bit Farbtiefe sein!&quot;, mtError, TMsgDlgButtons() << mbOK, 0);

    Image->Repaint();
}

Schreibe einen Kommentar