我用 CopyRect 放大图片,如下语句:
ForeImage.Canvas.CopyRect(DestRect, BackImage.Canvas, SourceRect);
我想在 ForeImage 的宽和高比 BackImage 大时,从 BackImage 中将整个图片复制到 ForeImage 中,这样可以放大图片,但是实际结果却不是我想要的,在 ForeImage 中显示出的图片比 BackImage 中的还小,是什么原因?

解决方案 »

  1.   

    是不是放大镜的效果?procedure TMainForm.ImageCopy(BoxCenterX, BoxCenterY, BoxSide: Integer);
    begin
    with SourceRect do
    begin
    Left:=BoxCenterX-BoxSide;
    Top:=BoxCenterY-BoxSide;
    Right:=BoxCenterX+BoxSide;
    Bottom:=BoxCenterY+BoxSide;
    end;with DestRect do
    begin
    Left:=BoxCenterX-dSide;
    Top:=BoxCenterY-dSide;
    Right:=BoxCenterX+dSide;
    Bottom:=BoxCenterY+dSide;
    end;ForeImage.Canvas.CopyRect(DestRect, BackImage.Canvas, SourceRect);
    end;
      

  2.   

    你会不会把第一个参数和第三个参数的意思弄反了呢,
    procedure CopyRect(const Dest: TRect; Canvas: TCanvas; const Source: TRect);
    Dest是ForeImage的尺寸,SourceRect是BackImage的尺寸
      

  3.   

    是与放大镜同样的方法,但我的是在点击鼠标左键时放大整个图片。在 ForeImage 中显示出的图片比 BackImage 中的还小的情况是将 ForeImage 的 Stretch 设成 True 时;如果设成 False ,并且在整个窗口在最大尺寸的状态下,开始放大还可以,连续放大几次后(每次放大 10%),就只能显示出一部分,右边有一小部分显示不出,但是显示不出的部分点击鼠标可以进入到 OnMouseDown 事件中,说明这个 ForeImage 的尺寸已经变到最大了,但是图片的右边一小部分却显示不出来。
    我的要求是:初始时,ForeImage 的大小与图片的大小一样,放大后 ForeImage 跟着变大,直到最大尺寸就不再变大(就是比窗口稍小一点)。