请教一个简单截图问题

AllBuilder 2008-07-04 11:39:06
我有一个Image,  里面放一张图. 图片很大但是我把strech 设置成true

800*600的图  在400*400 的Image 框里显示

现在我在IMAGE里任意拉一个框rect .想把rect拖出的内容保存起来.(注意,你在缩略图上拉的图片坐标和实际坐标是有不同的.)


如你拉个100,100,300,200 这个范围,实际图片这个区域要比在缩略图上的坐标更大.

不知叙述的各位看明白没?

谢谢啊.顶的也有分...

现在这块困扰我很久 bitblt,strechblt,copyrect 都不能很好解决.
...全文
132 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
AllBuilder 2008-07-04
  • 打赏
  • 举报
回复
yuqianyi1974 烦请给个完整的.

那个right,top,bottom 都需要round 吗?
yuqianyi1974 2008-07-04
  • 打赏
  • 举报
回复
不好意思错了
newrect.Left:=round((image1.Picture.Width / image1.Width)*rect.Left);
etomahawk 2008-07-04
  • 打赏
  • 举报
回复
strech 设置成true,只是在显示的时候去拉伸图像显示,实际上图片的大小没有变化。

你可以获取图片父类的 Canvas,然后,计算一下偏移,从这个Canvas上复制图像应当就是正确的了。

要不就是你把图片拉伸后再重新赋给Image.
Corn1 2008-07-04
  • 打赏
  • 举报
回复
晕,600/400不是1.5吗?
AllBuilder 2008-07-04
  • 打赏
  • 举报
回复
速度真快..呵呵谢谢啊

小弟在这块要加把劲了..以后还要多请教各位.13:00前结帖.
yuqianyi1974 2008-07-04
  • 打赏
  • 举报
回复
procedure TForm1.Button1Click(Sender: TObject);
var
rect,newrect:Trect;

begin

rect.Left:=10;
rect.Right:=100;
rect.Top:=20;
rect.Bottom:=200;
newrect.Left:=(image1.Picture.Width div image1.Width)*rect.Left;
newrect.right:=(image1.Picture.Width div image1.Width)*rect.Right;
newrect.top:=(image1.Picture.Height div image1.Height)*rect.top;
newrect.bottom:=(image1.Picture.Height div image1.Height)*rect.bottom;
//image1.Canvas.CopyRect(newrect,..);
end;
AllBuilder 2008-07-04
  • 打赏
  • 举报
回复
能给个DEMO例子吗?

OK 就理解给分...谢谢 助你升星.....
AllBuilder 2008-07-04
  • 打赏
  • 举报
回复
除了2 我知道.

1.5怎么来的呢"?
yuqianyi1974 2008-07-04
  • 打赏
  • 举报
回复
用image.canvas.pixels读取rect中的像素,保存不行吗?
Corn1 2008-07-04
  • 打赏
  • 举报
回复
你在内存里面保留原图啊,然后根据压缩的比例计算你这个框在原图中的座标,不就解决了?
框在原图中的座标:
Left=缩略图上的Left*2 //因为原图width800,缩略图width400
Right=Width-(缩略图的width-缩略图上的Right)*2
Top=缩略图上的Top*1.5
Bottom=Height-(缩略图的Height-缩略图上的Bottom)*1.5

1,184

社区成员

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

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