本帖最后由 cowbobe 于 2013-11-03 22:02:05 编辑

解决方案 »

  1.   


    //图片放大缩小
    procedure ResizeBmp(SrcBM: TBitmap; zoom: Single);//<<<<
    var
      rect: TRect;
      NewW, NewH, PicW, PicH: Integer;
      tem: Single;
      bmp:TBitmap;  //<<<<
    begin
      PicW := SrcBM.Width;
      PicH := SrcBM.Height;
      tem := PicW;
      NewW := trunc(tem * zoom);
      tem := PicH;
      NewH := trunc(tem * zoom);  bmp:=TBitmap.Create;//<<<<
      with bmp do  //<<<<
      begin
        Width := NewW;
        Height := NewH;
        rect:= Bounds(0,0,Width,Height);//<<<<
        Canvas.StretchDraw(rect, TGraphic(SrcBM));
      end;  SrcBM.Assign(bmp); //<<<<
      bmp.Free;  //<<<<
    end;//调用
    procedure TMainForm.ZoomInClick(Sender: TObject);
    var
        ZoomVal:Single;
    begin
        ZoomVal:=ZoomVal+0.2;
        ResizeBmp(img1.Picture.Bitmap,ZoomVal); //<<<<
    end;
      

  2.   

    注意image控件如果是通过属性面板load图片,图片就必须是bmp。
    如果是通过代码动态加载图片,jpg、bmp都可以
      

  3.   

    调整Image的宽高,拉放设置为True不就得了……
      

  4.   


    请问,为什么当我先点了放大按钮几下,再点缩小的按钮动作时,还是放大动作?
    procedure TMainForm.ZoomInClick(Sender: TObject);
    begin
        ZoomVal:=ZoomVal+0.1;
        ResizeBmp(Image1.Picture.Bitmap,ZoomVal);
    end;procedure TMainForm.ZoomOut1Click(Sender: TObject);
    begin
        ZoomVal:=ZoomVal-0.1;
        ResizeBmp(Image1.Picture.Bitmap,ZoomVal);
    end;
      

  5.   

      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;
      

  6.   

    StretchDraw
    改成
    CopyRect可能多用个临时bitmap,不要用StretchDraw