admin管理员组

文章数量:1567270

2024年7月21日发(作者:)

程序名称: WebCam测试

目的: 利用Win32API驱动本机摄像头。

注意事项: 路径默认不在LabWindow的环境变量中,需手工添加。

修改纪录:

作者: FASM

生成日期: 2009.5.22

*/

#include

#include

#include

#include //驱动摄像头的库包含文件

#include "Main.h"

static int panelHandle;

static int CapHandle; //获得的视频窗口句柄

int main (int argc, char *argv[])

{

if (InitCVIRTE (0, argv, 0) == 0)

return -1; /* out of memory */

if ((panelHandle = LoadPanel (0, "", PANEL)) < 0)

return -1;

DisplayPanel (panelHandle);

RunUserInterface ();

DiscardPanel (panelHandle);

return 0;

}

int CVICALLBACK PICCALLBACK (int panel, int control, int event,

void *callbackData, int eventData1, int eventData2)

{

switch (event)

{

case EVENT_LEFT_CLICK:

if(CapHandle) //如果视频窗口创建成功

{

SendMessage ((HWND)CapHandle, WM_CAP_DRIVER_DISCONNECT, 0, 0);

SendMessage ((HWND)CapHandle, WM_CAP_DRIVER_CONNECT, 0, 0);

SendMessage ((HWND)CapHandle, WM_CAP_SET_PREVIEWRATE, 1000, 0);

SendMessage ((HWND)CapHandle, WM_CAP_SET_SCALE, TRUE, 0);

SendMessage ((HWND)CapHandle, WM_CAP_SET_PREVIEW, TRUE, 0);

}

break;

//如果已打开,则先关闭

//连接设备

设置御览祯率,目前设为1000(设备较旧)

//打开御览

//

}

return 0;

}

int CVICALLBACK QUITCALLBACK (int panel, int control, int event,

void *callbackData, int eventData1, int eventData2)

{

switch (event)

{

case EVENT_COMMIT:

if(CapHandle)

SendMessage ((HWND)CapHandle, WM_CAP_DRIVER_DISCONNECT, 0, 0); //关闭设备连接,窗口句柄不需要释放(只是借用来的)

QuitUserInterface (0);

break;

case EVENT_LEFT_CLICK:

break;

}

return 0;

}

/*

函数说明:本来获得设备信息的最佳位置是在窗口类的创建过程,但LabWindows默认不处理Windows消息。所以改在

这里来预处理设备信息。

注意: 这个函数是会被LabWindows多次调用的,所以应对设备用到的资源进行保护。本例利用全局的视频御览句柄

做保护标志。(详见代码)

*/

int CVICALLBACK PANELCALLBACK (int panel, int event, void *callbackData,

int eventData1, int eventData2)

{

char szDeviceName[MAX_PATH] = {'0',}; //设备名称

char szDeviceDesc[MAX_PATH] = {'0',}; //设备描述

int Handle = 0; //面板的句柄

int CapLeft = 0; //这里和以下为创建的御览区域

int CapTop = 0;

int CapHeight = 0;

int CapWidth = 0;

switch (event)

{

case EVENT_GOT_FOCUS:

if(!CapHandle) //EVENT_GOT_FOCUS事件会被多次调用到,这里保证只会被创建一次

{

if(capGetDriverDescription(0,szDeviceName,MAX_PATH,szDeviceDesc,MAX_PATH)) //获得设备名称(如果有设备的话,返回真)

{

SetCtrlAttribute (panelHandle,PANEL_VIDEO, ATTR_LABEL_TEXT, szDeviceName); //显示设备名称

GetPanelAttribute (panelHandle,ATTR_SYSTEM_WINDOW_HANDLE,&Handle); //获得面板的句柄值

GetCtrlAttribute (panelHandle, PANEL_VIDEO, ATTR_LEFT, &CapLeft);

GetCtrlAttribute (panelHandle, PANEL_VIDEO, ATTR_TOP, &CapTop);

GetCtrlAttribute (panelHandle, PANEL_VIDEO, ATTR_HEIGHT, &CapHeight);

GetCtrlAttribute (panelHandle, PANEL_VIDEO, ATTR_WIDTH, &CapWidth);

CapHandle = (int) capCreateCaptureWindow ("TestCap",WS_CHILD | WS_VISIBLE ,CapLeft,

CapTop,CapWidth,CapHeight,(HWND)Handle,0);

}

}

break;

case EVENT_LOST_FOCUS:

break;

case EVENT_CLOSE:

break;

case EVENT_PANEL_SIZING:

break;

default:

break;

}

return 0;

}

//创建视频御览窗口

本文标签: 设备句柄御览获得视频