怎么样将一个图片中一某部分复制到另一图片并另存?

mustmust 2012-04-05 11:16:09
如题:

一个 image1, 一个 image2, 两个image中各放了一张大小一样的图片。

现要把 image1 中的 某位置某部分 复制到 image2 中的同样位置,并覆盖 image2 中原位置的图像,然后另存
image2 中 图像

用 copyrect 吗? 弄了一晚上也没弄出来,请各位指点,谢谢
...全文
810 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
Corn1 2012-04-11
  • 打赏
  • 举报
回复
BitBlt
horserao 2012-04-10
  • 打赏
  • 举报
回复
手机图片可以用手机登陆手机网直接下载的,注意流量哦~亲~
kaikai_kk 2012-04-08
  • 打赏
  • 举报
回复
就用CopyRect给你写个简单的,如果是jpg格式实现方法类似
下面是将图片2中某个区域,复制到图片1中对应的区域(区域大小,复制的位置可以自己调),合并后保存

procedure TForm1.BitBtn1Click(Sender: TObject);
var
bmp:Tbitmap;
Rt:TRect;
begin
bmp:=Tbitmap.Create; {创建1个位图}
try
Rt:=Rect(0,0,100,100); {要复制的区域}
image1.Canvas.CopyRect(Rt,image2.Canvas,Rt); {界面上效果}

bmp.Width:=image1.Picture.Width; {设置宽高与图片1相等}
bmp.Height:=image1.Picture.Height;
bmp.Canvas.CopyRect(Rect(0,0,bmp.Width,bmp.Height),image1.Canvas,Rect(0,0,image1.Picture.Width,image1.Picture.Height)); {完整复制图片1}
bmp.Canvas.CopyRect(Rt,image2.Canvas,Rt); {复制图片2的Rt区域}
bmp.SaveToFile('d:\1.bmp');
finally
bmp.Free;
end;
end;

山东蓝鸟贵薪 2012-04-08
  • 打赏
  • 举报
回复
努力学习中/...........
山东蓝鸟贵薪 2012-04-08
  • 打赏
  • 举报
回复
继续关注中
nm_wyh 2012-04-06
  • 打赏
  • 举报
回复
//合成照片(实现两张图左右合并)----------------------------------------------------------------------
function TDM.ComposeImage(Image_A, Image_B: string): Boolean;
var
Img_A, Img_B, Img_C, Img_Temp: TJPEGImage;
bmp_t, bmp: TBitmap;
TempPath:string;
begin
Result := false;
try
Img_A := TJPEGImage.Create;
Img_B := TJPEGImage.Create;
//最终合成的图片
Img_C := TJPEGImage.Create;
//临时存存储
Img_Temp := TJPEGImage.Create;
try
//加载第一张图片
Img_A.LoadFromFile(Image_A);
//加载第二张图片
Img_B.LoadFromFile(Image_B);
bmp := TBitmap.Create;
bmp_t := TBitmap.Create;
try
//合成后图片的宽度,如果不变此处可以不需要
bmp.Width := Img_A.Width + Img_B.Width
//合成后图片的高度,如果不变此处可以不需要
bmp.Height := Img_A.Height;
//把第一张图加载到临时画布中
bmp_t.Assign(Img_A);
//画第一张图(从Left=0,top=0的地方开始画)
bmp.Canvas.Draw(0, 0, bmp_t);
//把第二张图加载到临时画布中
bmp_t.Assign(Img_B);
//AV5直接拼接B图(从Left =Img_A.Width,top-0的地方开始拼接第二张图)
bmp.Canvas.Draw(Img_A.Width, 0, Img_B);
//拼接后的图片存储
Img_Temp.Assign(bmp);
TempPath := 'C:\1.jpg';
Img_Temp.SaveToFile(TempPath);
//删除原有文件
DeleteFile(PChar(Image_A));
DeleteFile(PChar(Image_B));
Result := true;
finally
bmp.Free;
bmp_t.Free;
end;
finally
Img_A.Free;
Img_B.Free;
Img_C.Free;
Img_Temp.Free;
end;
except
end;
end;
山东蓝鸟贵薪 2012-04-06
  • 打赏
  • 举报
回复
好的,我也学习一下
bdmh 2012-04-06
  • 打赏
  • 举报
回复
copyrect 可以,自己看看怎么用吧
http://blog.csdn.net/jinshaopu/article/details/6451413

1,183

社区成员

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

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