如果从一个tBitmap复制区一个区域到另一个tBitmap类?

haochin 2014-06-19 05:22:50
var
bmp1,bmp2 : tBitmap


从复制(截取)bmp1中的某个区域到bmp2中,
请问,要怎么做呢
...全文
2797 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
不得闲 2015-05-27
  • 打赏
  • 举报
回复
Canvas.CopyRect API Bitbl等都可以
rdfpl 2015-05-25
  • 打赏
  • 举报
回复
bmp.Canvas.CopyRect
Andy-88 2015-05-23
  • 打赏
  • 举报
回复
楼上热心人多 了 呵呵 我就不说了 方法也有很多种的
  • 打赏
  • 举报
回复
引用 1 楼 pathletboy 的回复:
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区域
简单易行,
lyhoo163 2014-08-24
  • 打赏
  • 举报
回复
1、原图,使用鼠标选择区域

2、截图后生成的新图

lyhoo163 2014-08-24
  • 打赏
  • 举报
回复
上述代码仅供参考。
lyhoo163 2014-08-24
  • 打赏
  • 举报
回复
这是我的代码: 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;
Blessed_Chuan 2014-08-21
  • 打赏
  • 举报
回复
bmp2.Assign(bmp1); 把bmp1的值给bmp2
缘中人 2014-08-21
  • 打赏
  • 举报
回复
很热闹啊
程晨c 2014-08-21
  • 打赏
  • 举报
回复
可以用windows提供的BitBlt函数实现
aniugee 2014-08-21
  • 打赏
  • 举报
回复
StretchBlt还可以进行缩放 楼上用JavaScript code也能把代码对的那么整齐
金卯刀 2014-06-19
  • 打赏
  • 举报
回复

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;
pathletboy 2014-06-19
  • 打赏
  • 举报
回复
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区域

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi GAME,图形处理/多媒体
社区管理员
  • GAME,图形处理/多媒体社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧