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;
}
//创建视频御览窗口
版权声明:本文标题:利用Win32API驱动本机摄像头 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.elefans.com/dianzi/1721522921a882831.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论