(Delphi 7.0)
窗体上 Timage1控件中  加载jpg图片显示。(注:jpg图片大 是根据timge大小自己动缩放显示的)
属性:
Timage1.Stretch := true;现提供出坐标 要从Timage1中截取坐标提供的区域到Timage2中? 小弟写了些代码但未能实现 请求帮助!var
  Bitmap: TBitmap;
  MyRect, MyOther: TRect;
begin  MyRect := Rect(47,393,960,544);  MyOther := Rect(0,0, 913,Image1.Height);
  Bitmap := TBitmap.Create;
  Bitmap.LoadFromFile('d:\3.bmp');
  Image2.Canvas.CopyRect(MyOther,Bitmap.Canvas,MyRect);
  Image2.Picture.SaveToFile('D:\1111.jpg');
  Bitmap.Free;
end;
这段代码,运行后 MyRect截取的区域不正确!并且显示在Image2中不能根据Image2大小缩放.但image2.stretch := true的。

解决方案 »

  1.   

    Image2.Canvas.CopyRect,image2是copy图形,而不是加载图形,当然strech无效了
      

  2.   

    该如何实现呢? 用BitBlt方法 有些不解。
      

  3.   

    BitBlt中的参数很好理解啊,前面是目标图形HDC(image2),后面是原HDC(image1)
      

  4.   

    var
      Bitmap,Bitmap2: TBitmap;
      MyRect, MyOther: TRect;
    begin  MyRect := Rect(47,393,960,544);  MyOther := Rect(0,0, 913,Image1.Height);
      Bitmap := TBitmap.Create;
      Bitmap2 := TBitmap.Create;
      Bitmap.LoadFromFile('d:\3.bmp');
      Bitmap2.Width:=MyRect.Right-MyRect.Left;
      Bitmap2.Height:=MyRect.Bottom-MyRect.top;  Bitmap2.Canvas.CopyRect(MyOther,Bitmap.Canvas,MyRect);
      Image2.Picture:=picuure(Bitmap2);
      Bitmap.Free;加一个  Bmp 图片  再给Imgae2
      

  5.   


    试过 但不明白picuure(Bitmap2)是?  我改成Image2.Picture.Assign(bitmap2); 运行后 坐标截取的大小 不是想要的结果
      

  6.   

    1.用GDI+按原图比例缩放图片大小,然后画到控件(大小为缩放后的大小)上
    2.copyrect时,画一张原图大小的BITMAP,然后直接从BITMAP上拷贝,当然得按你缩放后的比例来算需要拷贝的区域
      

  7.   


    GDI+ 如何实现呢?请指点下
      

  8.   

    .,自己下个gdi+的
    function DrawStrectBmp(sFile : string;Bmp : TBitmap ; iDrawW : integer) : single;
    var GpBmp : TGpBitmap;
        Gd : TGpGraphics;
        aSize : TSize;
        ih : integer;
    begin
      GpBmp := TGpBitmap.Create(sFile);
      ih := (iDrawW * GpBmp.Height / GpBmp.Width);
      Bmp.Width := iDrawW;
      Bmp.Height := ih;
      Result := iDrawW / GpBmp.Width;
      Gd := TGpGraphics.Create(Bmp.Canvas.Handle);
      Gd.DrawImage(GpBmp,GpRect(0,0,Bmp.Width,Bmp.Height),0,0,GpBmp.Width,GpBmp.Height,utpixel);
      Freeandnil(Gd);
      Freeandnil(GpBmp);
    end;调用
      var Bmp : TBitmap;
          precent : single;
    begin
      Bmp := TBitmap.Create;
      precent := DrawStrectBmp('file',Bmp,img1.Width);
      img1.Picture.Assign(Bmp);
      Bmp.Free;
    end;拷贝时,建一张原图大小的TBitmap,然后用你在img1上给出的trect按precent进行缩放,然后在原图的tbitmap上拷贝即可