基于LabWindowsCVI的摄像头控制技术--实现屏幕截图、录像功能.doc_第1页
基于LabWindowsCVI的摄像头控制技术--实现屏幕截图、录像功能.doc_第2页
基于LabWindowsCVI的摄像头控制技术--实现屏幕截图、录像功能.doc_第3页
基于LabWindowsCVI的摄像头控制技术--实现屏幕截图、录像功能.doc_第4页
基于LabWindowsCVI的摄像头控制技术--实现屏幕截图、录像功能.doc_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

基于LabWindows/CVI的摄像头控制技术实现屏幕截图、录像功能(2006-11-20 16:54:28) 转载分类: LabWindow/CVI技术文章 我们都知道,LabWindows/CVI的强大功能实际上不只是在测控领域,在其它方面,也显示着无与伦比的优势。你的电脑有没有摄像头?看到别人用QQ玩视屏你会不会去想怎么实现的? 一般来说,所有的摄像头都会包括一个AVICAP32.DLL动态链接库文件,而动态库里面必有capCreateCaptureWindow和capCreateCaptureWindowA这两个函数,我们就是利用这些函数实现图像采集的!这里介绍使用AVICAP32.DLL就可轻松的实现对摄像头编程,如果再加上你的网络编程水平,实现一个视屏聊天就不成什么问题了。如果电脑没有摄像头,但又想看看程序的效果,可以么?呵呵,当然可以,找个虚拟摄像头就可以搞定了,大家可以试试“SoftCam”这个软件,它是一个名副其实的软件摄像机,能模拟成为“真实的”摄像机,提醒一下各位,大家可不要用这个东东用在QQ,MSN等聊天软件上欺骗MM或GG啊。本例能实现图片的保存,浏览以及录像功能,在界面上都能显示出来,大家仔细瞧瞧吧!界面如下:图中的景像就是我的实验室,情况有点糟糕,哈哈,还能凑合着过!代码如下:#include windows.h#include avicap32.h#include#include#include cam.h/设置所需要摄像头的常量#define WM_CAP_START WM_USER/开始#define WM_CAP_STOP WM_CAP_START + 68 /停止#define WM_CAP_DRIVER_CONNECT WM_CAP_START + 10 /连接#define WM_CAP_DRIVER_DISCONNECT WM_CAP_START + 11 /断开#define WM_CAP_SAVEDIB WM_CAP_START + 25#define WM_CAP_GRAB_FRAME WM_CAP_START + 60#define WM_CAP_SEQUENCE WM_CAP_START + 62#define WM_CAP_FILE_SET_CAPTURE_FILEA WM_CAP_START + 20/保存至文件#define WM_CAP_SEQUENCE_NOFILE WM_CAP_START + 63#define WM_CAP_SET_OVERLAY WM_CAP_START + 51#define WM_CAP_SET_PREVIEW WM_CAP_START + 50#define WM_CAP_SET_CALLBACK_VIDEOSTREAM WM_CAP_START +6#define WM_CAP_SET_CALLBACK_ERROR WM_CAP_START +2#define WM_CAP_SET_CALLBACK_STATUSA WM_CAP_START +3#define WM_CAP_SET_CALLBACK_FRAME WM_CAP_START +5#define WM_CAP_SET_SCALE WM_CAP_START+ 53#define WM_CAP_SET_PREVIEWRATE WM_CAP_START+ 52#define WM_CAP_COPYDIBWM_CAP_START + 30 /复制图片/定义面板句柄static int handle;/定义摄像头句柄static int result;static int panelHandle;int main (int argc, char *argv)if (InitCVIRTE (0, argv, 0) = 0)return -1;/* out of memory */if (panelHandle = LoadPanel (0, cam.uir, PANEL) 0)SendMessage(HWND)result,WM_CAP_SAVEDIB,0,(LPARAM)path);/获得BMP位图IDGetBitmapFromFile (path, &bitmapID);switch (i)/设置三个位图浏览器case 0:CanvasDrawBitmap (panelHandle, PANEL_CANVAS_SNAP0, bitmapID, VAL_ENTIRE_OBJECT, VAL_ENTIRE_OBJECT);break;case 1:CanvasDrawBitmap (panelHandle, PANEL_CANVAS_SNAP1, bitmapID, VAL_ENTIRE_OBJECT, VAL_ENTIRE_OBJECT);break;case 2:CanvasDrawBitmap (panelHandle, PANEL_CANVAS_SNAP2, bitmapID, VAL_ENTIRE_OBJECT, VAL_ENTIRE_OBJECT);break; /删除BMP位图IDDiscardBitmap (bitmapID);/循环累加,共三次,三次之后回零i+;if (i = 3)i = 0;break;return 0;/开始录像按钮int CVICALLBACK recordstream (int panel, int control, int event,void *callbackData, int eventData1, int eventData2)char pathMAX_PATHNAME_LEN;switch (event)case EVENT_COMMIT:/保存录像if (FileSelectPopup (, *.avi, *.avi, 保存, VAL_SAVE_BUTTON, 0, 0, 1, 1, path) 0)SendMessage(HWND)result,WM_CAP_FILE_SET_CAPTURE_FILEA,0,(LPARAM)path); SendMessage(HWND)result, WM_CAP_SEQUENCE, 0, 0);break;return 0;/停止录像按钮int CVICALLBACK stopstream (int panel, int control, int event,void *callbackData, int eventData1, int eventData2)switch (event)case EVENT_COMMIT:SendMessage(HWND)result, WM_CAP_STOP, 0, 0);break;return 0;/显示制式设置int CVICALLBACK method (int panel, int control, int event,void *callbackData, int eventData1, int eventData2)int kind;int width;int height;int top;int left;switch (event)case EVENT_COMMIT:/获得制式种类GetCtrlVal (panelHandle, PANEL_RING, &kind);switch (kind)case 0:/160*120制式SetCtrlAttribute (panelHandle, PANEL_CANVAS_TV, ATTR_WIDTH, 160);SetCtrlAttribute (panelHandle, PANEL_CANVAS_TV, ATTR_HEIGHT, 120);break;case 1:/1176*144制式SetCtrlAttribute (panelHandle, PANEL_CANVAS_TV, ATTR_WIDTH, 176);SetCtrlAttribute (panelHandle, PANEL_CANVAS_TV, ATTR_HEIGHT, 144);break;case 2:/320*240制式SetCtrlAttribute (panelHandle, PANEL_CANVAS_TV, ATTR_WIDTH, 320);SetCtrlAttribute (panelHandle, PANEL_CANVAS_TV, ATTR_HEIGHT, 240);break;case 3:/352*288制式SetCtrlAttribute (panelHandle, PANEL_CANVAS_TV, ATTR_WIDTH, 352);SetCtrlAttribute (panelHandle, PANEL_CANVAS_TV, ATTR_HEIGHT, 288);break;case 4:/1默认制式SetCtrlAttribute (panelHandle, PANEL_CANVAS_TV, ATTR_WIDTH, 592);SetCtrlAttribute (panelHandle, PANEL_CANVAS_TV, ATTR_HEIGHT, 333);break;/获得屏幕中图像要显示的位置GetCtrlAttribute (panelHandle, PANEL_CANVAS_TV, ATTR_LEFT, &left);GetCtrlAttribute (panelHandle, PANEL_CANVAS_TV, ATTR_TOP, &top);GetCtrlAttribute (panelHandle, PANEL_CANVAS_TV, ATTR_HEIGHT, &height);GetCtrlAttribute (panelHandle, PANEL_CANVAS_TV, ATTR_WIDTH, &width);/重新定位SetCtrlAttribute (panelHandle, PANEL_CANVAS_TV, ATTR_TOP, (333-height)/2+55)

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论