读书人

关于图片缩放-为什么这段代码有有关问

发布时间: 2013-12-11 16:44:13 作者: rapoo

关于图片缩放--------为什么这段代码有问题?
本帖最后由 cowbobe 于 2013-11-03 22:02:05 编辑 偶想要在一个TIMAGE的控件里实现图片的放大和缩小功能,
图片是BMP,已加载,用下面的代码,但为什么执行后出现一片混乱的白色..


//图片放大缩小
procedure ResizeBmp(SrcBM, DstBM: Graphics.TBitmap; zoom: Single);//zoom 是小数倍数,代表是放大还是缩小
var
Rect: TRect;
NewW, NewH, PicW, PicH: Integer;
tem: Single;
begin
PicW := SrcBM.Width;
PicH := SrcBM.Height;
tem := PicW;
NewW := trunc(tem * zoom);
tem := PicH;
NewH := trunc(tem * zoom);
with DstBM do
begin
Width := NewW;
Height := NewH;
Rect.TopLeft := Point(0, 0);
Rect.BottomRight := Point(NewW, NewH);
Canvas.Rectangle(0, 0, NewH, NewW);
Canvas.StretchDraw(Rect, TGraphic(SrcBM));
end;
end;

//调用
procedure TMainForm.ZoomInClick(Sender: TObject);
var
ZoomVal:Single;
begin
ZoomVal:=ZoomVal+0.2;
ResizeBmp(Image1.Picture.Bitmap,Image1.Picture.Bitmap,ZoomVal);
end;


[解决办法]
var
Bitmap : TBitmap;
Jpg : TJPEGImage;
WicImg: TWICImage;
Factory: IWICImagingFactory;
Scaler: IWICBitmapScaler; //图像比例变换接口
begin
WicImg := TWICImage.Create;
Bitmap := TBitmap.Create;
Jpg := TJPEGImage.Create;
try
Jpg.Assign(AGraphic);
Jpg.CompressionQuality := 100;
Jpg.Compress;
Jpg.SaveToFile(TAppDir.GetAppTempDir + 'temp.jpg');
WicImg.LoadFromFile(TAppDir.GetAppTempDir + 'temp.jpg');
Factory := TWICImage.ImagingFactory;
Factory.CreateBitmapScaler(Scaler);
Scaler.Initialize(WicImg.Handle, AWidth, AHeight, WICBitmapInterpolationModeFant);
WicImg.Handle := IWICBitmap(Scaler);

//ufUploadFile.UploadFile(WicImg, AFileName, UploadType);
//WicImg.SaveToFile('C:\s2-wic500.jpg');
finally
Scaler := nil;
Factory := nil;
WicImg.Free;
Jpg.Free;
Bitmap.Free;
end;
end;

读书人网 >.NET

热点推荐