用Canvas的StretchDraw可以很方便的實作影像的縮放,但是有時候失真比較嚴重,遠不如系統自帶的畫圖軟體。之前在網上也找了一個演算法,但是本人圖形學知識有限,代碼寫的也有點不清楚,測驗沒有成功。
現在要做一個自動批量縮圖的軟體自用,希望有高人不吝賜教,最好有代碼!
uj5u.com熱心網友回復:
GDI函式可以嗎?uj5u.com熱心網友回復:
縮小一般就是附近幾個點求平均,放大就要進行插值,精度越高,速度越慢uj5u.com熱心網友回復:
以前回復過類似的問題,影像縮放最好的演算法是bicubic resample,GDI的StretchBlt、StretchDIBits沒有用此演算法,需要自己實作,但是可以用GDI+:uses WinAPI.GDIPAPI, WinAPI.GDIPOBJ;
var
Bitmap1: TGPBitmap;
Bitmap2: TBitmap;
Graphic: TGPGraphics;
begin
Bitmap1 := TGPBitmap.Create('test.bmp'); // bmp, gif, jpeg, png...
Bitmap2 := TBitmap.Create;
with Bitmap2 do
begin
Width := Bitmap1.GetWidth * 2 div 3; // shrink to 2/3 width
Height := Bitmap1.GetHeight * 2 div 3; // shrink to 2/3 height
PixelFormat := pf32bit;
end;
Graphic := TGPGraphics.Create(Bitmap2.Canvas.Handle);
Graphic.SetInterpolationMode(InterpolationModeHighQualityBicubic); // bicubic resample
Graphic.DrawImage(Bitmap1, 0, 0, Bitmap2.Width, Bitmap2.Height);
Bitmap2.SaveToFile('test_resized.bmp');
Graphic.Free;
Bitmap2.Free;
Bitmap1.Free;
end;
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/85954.html
標籤:基礎類
