var
  bmp1,bmp2 : tBitmap从复制(截取)bmp1中的某个区域到bmp2中,
请问,要怎么做呢

解决方案 »

  1.   

    bmp2.Canvas.CopyRect(Rect(100,100,200,200), bmp1.Canvas, Rect(0,0,100,100));从bmp1 0,0,100,100区域拷贝到bmp2 100,100,200,200区域
      

  2.   


    procedure CropBitmap(InBitmap, OutBitMap : TBitmap; X, Y, W, H :Integer);
    begin
      OutBitMap.PixelFormat := InBitmap.PixelFormat;
      OutBitMap.Width  := W;
      OutBitMap.Height := H;
      BitBlt(OutBitMap.Canvas.Handle, 0, 0, W, H, InBitmap.Canvas.Handle, X, Y, SRCCOPY);
    end;
    //使用方式
    Var
      Bmp : TBitmap;
    begin
      Bmp:=TBitmap.Create;
      try
        CropBitmap(Image1.Picture.Bitmap, Bmp, 10,0, 150, 150);
        ....  
      finally
        Bmp.Free;
      end;
    end;
      

  3.   

    StretchBlt还可以进行缩放楼上用JavaScript code也能把代码对的那么整齐
      

  4.   

    可以用windows提供的BitBlt函数实现
      

  5.   

    bmp2.Assign(bmp1);
    把bmp1的值给bmp2
      

  6.   

    这是我的代码:
    1、将图读入Image1;
    2、Image2,无图,与Image1重叠;鼠标Image2模拟获取截图的左上点,右下点位置数据:XX1,YY1,XX2,YY2;
    3、新图分辨率ComboBox1.ItemIndex
    4、新的图,以ImagePath+TempName+'.bmp'文件名另存;
    5、ChangeImageSize;显示截图代码如下:
    procedure TSeleteImageFrm.Button2Click(Sender: TObject);
    var MyRect, NewRect: TRect;
        Bmp,NewBmp: TBitmap;
        s1,s2:string;
        W,H,WW,WH:integer;
        k,k1:double;
    begin
      TempName:=Edit1.text;                // 文件名
      if (XX2=0) or (YY2=0) then
      begin
        XX1:=0;
        YY1:=0;
        XX2:=Image1.Picture.Graphic.Width;
        YY2:=Image1.Picture.Graphic.Height;
      end;
      Bmp:=TBitmap.Create;
      NewBmp:=TBitmap.Create;
      MyRect := Rect(XX1,YY1,XX2,YY2);
      NewRect := Rect(0,0,XX2-XX1, YY2-YY1);
      Bmp.Width:=XX2-XX1;
      Bmp.Height:=YY2-YY1;
      Bmp.Canvas.CopyRect(NewRect,Image2.Canvas, MyRect);
      case ComboBox1.ItemIndex of
        0: ChangeAnyPixels(Bmp,NewBmp,100,133);
        1: ChangeAnyPixels(Bmp,NewBmp,150,200);
        2: ChangeAnyPixels(Bmp,NewBmp,200,266);
        3: ChangeAnyPixels(Bmp,NewBmp,225,300);
        4: ChangeAnyPixels(Bmp,NewBmp,300,400);
      end;
      NewBMP.SaveToFile(ImagePath+TempName+'.bmp');
      Image1.Picture.Assign(BMP);
      Image2.Picture.Assign(BMP);
      ChangeImageSize;
      XX2:=0;
      YY2:=0;
      Bmp.Free;
      NewBmp.Free;
    end;
      

  7.   

    bmp.Canvas.CopyRect
      

  8.   

    Canvas.CopyRect
    API Bitbl等都可以