如何保存一幅图片的指定部分呢?(50分)

  • 主题发起人 主题发起人 question
  • 开始时间 开始时间
Q

question

Unregistered / Unconfirmed
GUEST, unregistred user!
比如有一副 800*600 的图象,我想将其中 指定位置(根据
lefttop,rightbottom)的方式将其中一块指定大小的内容
另存为一副新图片,如何实现?
Thank you
 
把图片 COPY RECT 下来,然后保存呀
 
可用TCanvas.CopyRect方法,Delphi文档说明如下:

从另一个Canvas中Copy部分图象到本Canvas中
procedure CopyRect(Dest: TRect; Canvas: TCanvas; Source: TRect);

描述:
从另一个Canvas中Copy部分图象到本Canvas的图象中.
Dest指定图象将被Copy到哪个区域.
Canvas参数指定图象来源的Canvas.
Source图象来自源Canvas中的哪个区域.

图象的Copy模式由CopyMode属性指定.
 
CopyRect方法
如果要在图上画一个框的实现方法可以参考DELPHI2中的作图的例子
在mouse的系列事件中来完成画框
 
需要具体的函数,最好写个函数。
 
我有个问题不明白,
当我从Canvas1 往Canvas2上Copy 时,
不知怎么回事,挡在Canvas1前面的Windows如:其他的应用程序界面。
也给Copy到Canvas2上了。
也是用的CopyRect方法。
 
用BITMAP的canvas试试
 
能些个完整的函数吗?
我以前也用了Copyrect 效果不太好,特别是将大的图象缩小,
至少 NT 和 Win98 上看的不一样(一样配置的计算机)。
谢谢!
我很急!!!
 
可以先将图片放在一个TBitMap中,设其为BitMap1. 然后再根据你的需要,创建一个
指定大小的TBitMap,设其为BitMap2.然后再使用CopyRect, 将BitMap1中指定区域
Copy到BitMap2中,最后用BitMap2的SaveToFile,将BitMap2保存即可.具体代码如下:
var
BitMap1, BitMap2: TBitMap;
YourRect: TRect;
begin
BitMap1 := TBitMap.Create;
BitMap1.LoadFromFile('OriginPictureFileName');
BitMap2 := TBitMap.Create;
BitMap2.Height := YourRect.Bottom - YourRect.Top;
BitMap2.Width := YourRect.Right - YourRect.Left;
BitMap2.CopyMode := cmSrcCopy;
BitMap2.CopyRect(YourRect, BitMap1.Canvas, YourRect);
BitMap2.SaveToFile('NewPictureFileName');
BitMap2.Free;
BitMap1.Free;
end

 
你可以用bitblt函数来做。
var
srcbmp,desbmp:TBitmap;
begin
srcbmp....//这里是原图形.
desbmp:=TBitmap.Create;
desbmp.width:= w ;// w,h 为你要截取的长宽。
desbmp.height:= h;
bitblt(desbmp.Canvas.handle,0,0,w,h,
srcbmp.canvas.handle,x,y,SRCCOPY);//x,y为你要拷贝的原图形的左上角坐标。
bitblt.Savetofile(filename);
end;

 
你可以将需要的部分一个一个象素来写到另外一个位图中去。
bitmap.canvas.pixel[i,j]是个颜色的值,
 
问题我已经解决,没有试 lizhi 的方法,不过我想它是可行的.
 
多人接受答案了。
 
但是对于JPEG格式的图象如何处理呢(不能转换为BMP格式处理)?
 
后退
顶部