[转帖]Delphi7.0中两种屏幕抓图技术的操作方法_Android, Python及开发编程讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  Android, Python及开发编程讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 3773 | 回复: 0   主题: [转帖]Delphi7.0中两种屏幕抓图技术的操作方法        下一篇 
wenjie.zhang
注册用户
等级:上尉
经验:628
发帖:54
精华:0
注册:2013-11-11
状态:离线
发送短消息息给wenjie.zhang 加好友    发送短消息息给wenjie.zhang 发消息
发表于: IP:您无权察看 2013-11-14 10:42:17 | [全部帖] [楼主帖] 楼主

(1)抓取屏幕图像的难点有两个:一是如何夺取屏幕的句柄,二是知道屏幕句柄后如何获取屏幕的图像。Borland公司的设计人员用画布(Tcanvas)对象封装了Windows的大部分图形输出功能,可以通过它以更直观的方式和Windows的屏幕打交道,而不必关心令人头疼的Windows API函数。具体程序如下:

procedure TForm1.Timer1Timer(Sender:TObject);//抓取屏幕,并保存到Image控件中

var

Fullscreen:Tbitmap;

FullscreenCanvas:TCanvas;

dc:HDC;

begin

Fullscreen:=TBitmap.Create;

//创建一个BITMAP来存放图象

Fullscreen.Width:=screen.width;

Fullscreen.Height:=screen.Height;

DC:=GetDC(0); //取得屏幕的DC,参数0指的是屏幕

FullscreenCanvas:=TCanvas.Create;

//创建一个CANVAS对象

FullscreenCanvas.Handle:=DC;

Fullscreen.Canvas.CopyRect(Rect(0,0,screen.Width,screen.Height),

fullscreenCanvas,Rect(0,0,Screen.Width,Screen.Height));

//把整个屏幕复制到BITMAP中

FullscreenCanvas.Free;

//释放CANVAS对象

ReleaseDC(0,DC); //释放DC

//*******************************

image1.picture.Bitmap:=fullscreen; //拷贝下的图象赋给IMAGE对象

image1.Width:=fullscreen.Width;

image1.Height:=fullscreen.Height;

fullscreen.free; //释放bitmap

form1.WindowState:=wsNormal; //复原窗口状态

form1.show; //显示窗口

messagebeep(1); //BEEP叫一声,报告图象已经截取好了。

end;

    (2)Delphi的第三方控件ScreenCapture,它是一个很好的免费的截图控件,可以轻松抓取任意大小(全屏当然行)、屏幕的任何位置,还可以设置所截图像的形状、以及用何种模式截图。下面介绍的是用TcmWindow模式截图,使用非常简单,使用效果可以与著名的抓图软件SnagIt32媲美转载自bet365.smszdm.com。

procedure TForm1.BtnStartClick(Sender:TObject);

begin

ScreenCapture1.start; //开始截图

end;

//当截取屏幕成功时,此事件发生

procedure TForm1.ScreenCapture1Capture(Sender:TObject;Bitmap:TBitmap);

begin

//调整滚动窗口的大小以适应截获图像的大小

Scrollbox1.HorzScrollBar.Range:= Image1.width;

Scrollbox1.VertScrollBar.Range:= Image1.height;

end;

procedure TForm1.FormCreate(Sender:TObject);

begin

//载入entntacp.dll文件

BtnStart.enabled:= ScreenCapture1.dllavailable;

//显示版本信息

    caption:= '屏幕抓图软件' + ScreenCapture1.version;

end;

//当没有足够的内存支持截取屏幕时,此事件发生

procedure TForm1.ScreenCapture1Error(Sender:TObject);

begin

MessageDlg('屏幕截取时发生一个错误!请关闭其他应用程序以获得更多内存资源.', mtError,[mbOK],0);

end;

//当用户按“Esc”键,即取消屏幕截取时,此事件发生

procedure TForm1.ScreenCapture1UserCancelled(Sender:TObject);

begin

MessageDlg('用户取消屏幕截取。',mtInformation,[mbOK],0);

end;




赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论