Mich hat die schlechte Qualität gestört und daher hab ich die Routine nocheinmal komplett neu mit der Graphics32 Library geschrieben. Der StretchFilter:=sfLanczos zeichnet das ganze jetzt schön weich
Das ganze funktioniert jetzt nicht nur mit jpegs, daher die SaveImage Prozedur, die den Bitmap32 nochmal in ein Jpeg umwandelt. Ich hab ziemlich lange für gebraucht, daher tut euch das nicht an und benutzt meinen Schnipsel
Ein Erwähnung wäre natürlich ganz nett
Delphi-Quellcode:
[..] uses Classes, Types, Graphics, Jpeg, GR32, GR32_Image; [..]
procedure SaveImage(inBmp: TBitmap32; filename: string);
var jpeg: TJPEGImage;
bmp: TBitmap;
begin
jpeg := TJPEGImage.Create;
bmp := TBitmap.Create;
try
bmp.Assign(inBmp);
jpeg.CompressionQuality := 100;
jpeg.Assign(bmp);
jpeg.SaveToFile(filename);
finally
jpeg.Free;
bmp.Free;
end;
end;
procedure resizePicture(infile: string; outfile: string; width, height: integer;
aspectratio: boolean);
var srcpic, destpic:TBitmap32;
destrect, srcrect:TRect;
begin
srcpic:=TBitmap32.Create;
try
srcpic.LoadFromFile(infile);
destpic:=TBitmap32.Create;
if aspectratio=true then height:=width * srcpic.Height div srcpic.Width;
try
destpic.width:=width;
destpic.height:=height;
destrect:=Rect(0,0,destpic.width,destpic.height);
srcrect:=Rect(0,0,srcpic.width,srcpic.height);
srcpic.StretchFilter:=sfLanczos;
destpic.Draw(destrect,srcrect,srcpic);
finally
srcpic.free;
end;
//destpic.SaveToFile(outfile);
SaveImage(destpic, outfile);
finally
destpic.free;
end;
end;