首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

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

2013-12-11 
关于图片缩放--------为什么这段代码有问题?本帖最后由 cowbobe 于 2013-11-03 22:02:05 编辑偶想要在一个

关于图片缩放--------为什么这段代码有问题?
本帖最后由 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;

热点排行