Hallo,
ich habe es realisiert mit Graphics32.
Delphi-Quellcode:
procedure TFRMEdtImmoBild.LoadAndConvertImage(const AFileName: string);
Var
R: TKernelResampler;
ASrcImage: TBitMap32;
ADstImage: TBitMap32;
ABmp: TBitMap;
AJPeg: TJPegImage;
AScale: Extended;
begin
// Zum Abspeichern als Jpeg
AJPeg := TJPEGImage.Create;
// als Buffer von TImage32 zu TJpeg
ABmp := TBitMap.Create;
// Originalbild
ASrcImage := TBitmap32.Create;
// verkleinertes Bild
ADstImage := TBitMap32.Create;
Screen.Cursor := crHourGlass;
try
// Datei laden
ASrcImage.LoadFromFile(AFileName);
// Skalierungsfaktor (z.B. 0.5 zum Verkleinern auf 50 %
// in diesem Beispiel wir das Bild max. 300 Pixel breit oder hoch sein
AScale := (300 / Max(ASrcImage.Width, ASrcImage.Height));
// Zielbild Größe einstellen
ADstImage.Width := Round(ASrcImage.Width * AScale);
ADstImage.Height := Round(ASrcImage.Height * AScale);
R := TKernelResampler.Create(ASrcImage);
R.Kernel := TLanczosKernel.Create;
// Zielbild ist fertig
ADstImage.Draw(ADstImage.BoundsRect, ASrcImage.BoundsRect, ASrcImage);
// direkt geht es leider nicht in das AJpeg
ABmp.Assign(ADstImage);
if AJPeg.CompressionQuality <> defJpegQuality then
AJPeg.CompressionQuality := defJpegQuality;
AJPeg.Assign(ABmp);
// TDMImmoBild(DataModule).StoreImages(AJPeg);
// Speichern AJPeg.SaveToFile ???
finally
Application.ProcessMessages;
Screen.Cursor := crDefault;
AJPeg.Free;
ABmp.Free;
ADstImage.Free;
ASrcImage.Free;
end;
end;
Cu, Frank