this slowpoke moves

Bitmap Calculate Grayscale

Das Berechnen eines Bitmaps in exakten Graustufen dauerte immer seine Zeit. Die Funktionen waren immer zu langsam und brachen meist beim Berechnen ab. 

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

Beliebte Posts

Translate