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[xSrc].rgbtRed;
g = 0.587 * srcRow[xSrc].rgbtGreen;
b = 0.114 * srcRow[xSrc].rgbtBlue;
gray = r + g + b; // Grauwert ausrechnen
// Grauwerte setzen
srcRow[xSrc].rgbtRed = gray;
srcRow[xSrc].rgbtGreen = gray;
srcRow[xSrc].rgbtBlue = gray;
}
}
}
catch ( Exception &E )
{
MessageDlg(E.Message, mtError, TMsgDlgButtons() << mbOK, 0);
}
}
else MessageDlg("Das Bild muss ein Bitmap mit 24Bit Farbtiefe sein!", mtError, TMsgDlgButtons() << mbOK, 0);
Image->Repaint();
}