如何截取一个加载JPG图象的Image控件上的一块?(33分)

  • 主题发起人 主题发起人 ynduanlian
  • 开始时间 开始时间
Y

ynduanlian

Unregistered / Unconfirmed
GUEST, unregistred user!
一个Image组件Img1,在其上显示了一张JPEG图像(大小为800*800),如何在另一个Image控件Img2中显示Img1中的一部分,比如说Rect(100,100,200,200)的这部分?
 
问题: 如何保存一幅图片的指定部分呢? ( 积分: 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,
 
但是对于JPEG格式的图象如何处理呢?
TJPEGIMage没有Canvas属性,如何CopyRect ?
 
接受答案了.
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
2K
DelphiTeacher的专栏
D
后退
顶部