怎样用鼠标选中图片的某个区域,然后将其保存到其他位置!! ( 积分: 100 )

  • 主题发起人 主题发起人 naj94656
  • 开始时间 开始时间
N

naj94656

Unregistered / Unconfirmed
GUEST, unregistred user!
怎样用鼠标选中图片的某个区域,然后将其保存到其他位置!!
效果就像PHOTOSHOP里截图一样!!急!
 
怎样用鼠标选中图片的某个区域,然后将其保存到其他位置!!
效果就像PHOTOSHOP里截图一样!!急!
 
高手请帮忙!!
 
有两种方法:
1、将选中区域使用考屏抓拍下来,保存即可
2、使用数字图象处理技术,判断图象区域,然后根据图象的存储格式重新构造一个图象

第一个比较简单,容易实现,但是效果不一定与原图象完全相同,当然效果还是可以,至少肉眼上是,抓拍程。
第二个实现比较复杂,你需要去了解图象处理技术,但是可以保证图象的质量。

以下是抓屏程序:
procedure Tclient.ScreenCap(LeftPos, TopPos, RightPos, BottomPos: integer);
var
RectWidth, RectHeight: integer;
SourceDC, DestDC, Bhandle: integer;
Bitmap: TBitmap;
begin
RectWidth := RightPos - LeftPos;
RectHeight := BottomPos - TopPos;
SourceDC := CreateDC('DISPLAY', '', '', nil);
DestDC := CreateCompatibleDC(SourceDC);
Bhandle := CreateCompatibleBitmap(SourceDC,
RectWidth, RectHeight);
SelectObject(DestDC, Bhandle);
BitBlt(DestDC, 0, 0, RectWidth, RectHeight, SourceDC,
LeftPos, TopPos, SRCCOPY);
Bitmap := TBitmap.Create;
Bitmap.Handle := BHandle;
BitMap.SaveToStream(BmpStream);
BmpStream.Position := 0;
LeftSize := BmpStream.Size;
Bitmap.Free;
DeleteDC(DestDC);
ReleaseDC(Bhandle, SourceDC);
end;
 
用CopyRect的方式
http://www.delphibbs.com/delphibbs/dispq.asp?lid=173211
标题:如何对图像进行局部放大?

var drect,srect:TRect;
origin:TPoint;
begin
srect:=rect(0,0,10,10);
drect:=rect(0,0,20,20);
Image1.Canvas.CopyMode:=cmSrcCopy;
Image1.Canvas.CopyRect(drect,image2.canvas,srect);
end;
 
如果说要实现类PHOTOSHOW的虚线选择的话,我记得是2004年的第二期发表过一篇陈絮的《PHOTOSHOP流动型选取边框》一文的,可找来借鉴一下的,如果找不到,就看另一个人如何用.NET来实现这个功能的,我想原理是一样的.
http://www.cstc.net.cn/docs/docs.php?id=248
 
procedure TForm1.Button1Click(Sender: TObject);
var
Bmp1,Bmp2 :TBitmap;
begin
Bmp1 :=TBitmap.Create;
Bmp1.LoadFromFile('e:/图片/end004.bmp');
Bmp2 :=TBitmap.Create;
Bmp2.Width :=Bmp1.Width;
Bmp2.Height :=Bmp1.Height;
Bmp2.PixelFormat :=Bmp1.PixelFormat;
Bmp2.Canvas.FillRect(Bmp2.Canvas.ClipRect);
BitBlt(Bmp2.Canvas.Handle,0,0,Bmp2.Width,Bmp2.Height,Bmp1.Canvas.Handle,0,0,SRCINVERT);
Image1.Picture.Bitmap.Assign(Bmp2);
Bmp1.Free;
Bmp2.Free;
end;
 
影煞——截图
http://free.ys168.com/?chbqq
 
差不多的例子
http://www.delphibbs.com/keylife/iblog_show.asp?xid=7148
 

Similar threads

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