matlab api 截屏matlab api 截屏.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
matlab api 截屏matlab api 截屏

matlab api 截屏 摘要:结合如何用window?API实现matlab屏幕抓取函数,介绍了在matlab中如何利用matlab与C/C++的接口,调用操作系统API,扩展matlab功能。 引言 MATLAB?产品家族是美国?MathWorks公司开发的用于概念设计,算法开发,建模仿真,实时实现的理想的集成环境。由于其完整的专业体系和先进的设计?开发思路,使得?MATLAB?在多种领域都有广阔的应用空间。 尽管MATLAB在科学研究以及工业技术开发方面有着极为广泛的应用,但是它也不是万能的。在某些场合下,MATLAB自身携带的函数及其组合并无法完全?满足用户的要求,而必须通过调用操作系统的API函数来实现。MATLAB在设计时已经考虑到这点,为我们提供了mex命令,可用于将调用操作系统API?函数的C程序编译成DLL文件,也就是MEX文件,使之成为MATLAB的一个扩展函数。这样,我们在MATLAB环境下编程时就可以直接调用该扩展函?数,达到间接调用操作系统API函数的目的。本文将通过如何为MATLAB编写屏幕抓取函数来演示上述过程。 MEX接口 MEX是MATLAB?Executable的缩写,也就是可以在MATLAB中执行。这是MATLAB和其他主要编程语言如C/C++,FORTRAN的接口。普通的C?/C++或是FORTRAN源程序,只要加上一个特殊的接口函数,就能通过MATLAB里的MEX命令编译成一种特殊的动态链接库函数,而这种函数可以在?MATLAB环境下编程时直接调用,与MATLAB内嵌的函数一样。这个特殊的接口函数相当于C程序中的main函数,是程序的入口,程序的执行就是从这?个入口函数开始的。其原型为 void?mexFunction(int?nlhs,?mxArray?*plhs[],?int?nrhs,?const?mxArray?*prhs[]) 其中,参数nlhs和nrhs为输出和输入变量的数目,参数plhs和prhs为输出和输入变量指针的指针,prhs是长度为nrhs的输入变量的指针数组,plhs是长度为nlhs的输出变量的指针数组。 利用window?API实现matlab屏幕抓取函数 本质上就是利用C语言调用window?API函数来实现屏幕抓取功能,同时,必须处理好C语言与matlab接口问题和C语言中数组存储与matlab中数组存储的转化问题。 以下是C源程序,有详细的注释。 //?matlab?mex?file?to?snap?the?screen //?compile?to?use?mex?screensnap.c?user32.lib?gdi32.lib //?usage:1,?a=screensnap(0)?%exclude?the?matlab?window //?imshow(a); //?2,?a=screensnap(1);?%include?the?matlab?window //??imshow(a); //?designed?by?darnshong?chenzushang@? //?2005,12,18 #include?windows.h #include?string.h #include?mex.h void?mexFunction(int?nlhs,?mxArray?*plhs[],?int?nrhs,?const?mxArray?*prhs[]) { int?cx,cy,recnum; int?dims[3],i,j,k; char?*pchar,*mloc; bool?bshowmatlab;//抓屏时是否屏蔽matlab主窗口 HWND?hwin,hactw; HDC?dc,memdc; RECT?rect; HBITMAP?hbitm,hold; BITMAPINFOHEADER?binfoh; if(nrhs!=1)?//对输入参数进行检验 mexErrMsgTxt(Need?1?argument!\n); if(!mxIsDouble(prhs[0])) mexErrMsgTxt(The?input?argument?must?be?a?numeric!\n); if(*(double*)(mxGetData(prhs[0]))==0) bshowmatlab=false; else bshowmatlab=true; hactw=GetForegroundWindow();//获取matlab的窗口句柄 hwin=GetDesktopWindow();//获取桌面窗口句柄 dc=GetWindowDC(hwin);//获取桌面窗口DC GetWindowRect(hwin,rect);//获取桌面窗口大小 cx=rect.right-

您可能关注的文档

文档评论(0)

zyongwxiaj8 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档