Hier ist eine Funktion, die das blitzschnell und sicher erledigt, unabhängig davon, wie groß das Bitmap ist.
uses Jpeg
procedure ImageGrayScale(var AnImage: TImage);
var
JPGImage: TJPEGImage;
BMPImage: TBitmap;
MemStream: TMemoryStream;
begin
BMPImage := TBitmap.Create;
try
BMPImage.Width := AnImage.Picture.Bitmap.Width;
BMPImage.Height := AnImage.Picture.Bitmap.Height;
JPGImage := TJPEGImage.Create;
try
JPGImage.Assign(AnImage.Picture.Bitmap);
JPGImage.CompressionQuality := 100;
JPGImage.Compress;
JPGImage.Grayscale := True;
BMPImage.Canvas.Draw(0, 0, JPGImage);
MemStream := TMemoryStream.Create;
try
BMPImage.SaveToStream(MemStream);
MemStream.Position := 0;
AnImage.Picture.Bitmap.LoadFromStream(MemStream);
AnImage.Refresh;
finally
MemStream.Free;
end;
finally
JPGImage.Free;
end;
finally
BMPImage.Free;
end;
end;
Beispiel :
procedure TForm1.Button1Click(Sender: TObject);
begin
ImageGrayScale(Image1);
end;
Keine Kommentare:
Kommentar veröffentlichen