问题: 如何保存一幅图片的指定部分呢? ( 积分: 50 )
分类: 图形图象
来自: question, 时间: 1999-05-25 23:27:47, ID: 109956
比如有一副 800*600 的图象,我想将其中 指定位置(根据
lefttop,rightbottom)的方式将其中一块指定大小的内容
另存为一副新图片,如何实现?
Thank you
来自: CJ, 时间: 1999-05-25 23:33:54, ID: 109958
把图片 COPY RECT 下来,然后保存呀
来自: 李颖, 时间: 1999-05-26 12:00:13, ID: 110039
可用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属性指定.
来自: bluebird, 时间: 1999-05-26 14:45:32, ID: 110057
CopyRect方法
如果要在图上画一个框的实现方法可以参考DELPHI2中的作图的例子
在mouse的系列事件中来完成画框
来自: question, 时间: 1999-05-27 8:35:04, ID: 110173
需要具体的函数,最好写个函数。
来自: lizhao, 时间: 1999-06-03 16:21:42, ID: 111915
我有个问题不明白,
当我从Canvas1 往Canvas2上Copy 时,
不知怎么回事,挡在Canvas1前面的Windows如:其他的应用程序界面。
也给Copy到Canvas2上了。
也是用的CopyRect方法。
来自: srw, 时间: 1999-06-04 15:31:12, ID: 112091
用Copyrect
来自: George, 时间: 1999-06-04 17:33:28, ID: 112122
用BITMAP的canvas试试
来自: question, 时间: 1999-06-05 20:39:23, ID: 112435
能些个完整的函数吗?
我以前也用了Copyrect 效果不太好,特别是将大的图象缩小,
至少 NT 和 Win98 上看的不一样(一样配置的计算机)。
谢谢!
我很急!!!
来自: 陈冲伟, 时间: 1999-06-06 9:24:02, ID: 112544
可以先将图片放在一个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
来自: lizhao, 时间: 1999-06-14 10:03:09, ID: 114918
你可以用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;
来自: lwlnic, 时间: 1999-06-18 10:48:22, ID: 115895
你可以将需要的部分一个一个象素来写到另外一个位图中去。
bitmap.canvas.pixel[i,j]是个颜色的值,
来自: question, 时间: 1999-06-20 20:11:43, ID: 116329
问题我已经解决,没有试 lizhi 的方法,不过我想它是可行的.
来自: question, 时间: 1999-06-20 20:19:44, ID: 116330
多人接受答案了。
来自: jlle, 时间: 2000-10-07 20:41:15, ID: 359411
但是对于JPEG格式的图象如何处理呢(不能转换为BMP格式处理)?
得分大富翁: lizhao-25,李颖-25,