需要摄像头厂商SDK
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using DVPCameraType;//命名空间
namespace WinFormCamera
{
public partial class Form1 : Form
{
public static IntPtr m_ptr_wnd = new IntPtr();
public static IntPtr m_ptr = new IntPtr();
private DVPCamera.dvpStreamCallback _proc;
uint m_handle = 0;//相机句柄
public Form1()//窗体进程
{
InitializeComponent();
m_ptr_wnd = pictureBox1.Handle;//贴图控件句柄
}
/*视频流回调函数*/
public static int _dvpStreamCallback(uint handle, dvpStreamEvent _event, IntPtr pContext, ref dvpFrame refFrame, IntPtr pBuffer)
{
//将图像数据绘制到贴图控件
dvpStatus status = DVPCamera.dvpDrawPicture(ref refFrame, pBuffer, m_ptr_wnd, (IntPtr)0, (IntPtr)0);
return 0;
}
/*枚举设备*/
private void Find_Click(object sender, EventArgs e)
{
Select.Items.Clear();//每次点击枚举按钮后先清空列表
int item;//下拉列表项目索引
uint count = 0;//设备数量
dvpCameraInfo dev_info = new dvpCameraInfo();//相机信息结构体
DVPCamera.dvpRefresh(ref count);//刷新相机数量
for (uint i = 0; i < count; i++)
{
DVPCamera.dvpEnum(i, ref dev_info);//枚举
item=Select.Items.Add(dev_info.FriendlyName);//添加到下拉列表,会返回0
Select.SelectedIndex = item;//设置下拉列表项目为第一个索引
}
}
/*打开设备*/
private void Open_Click(object sender, EventArgs e)
{
DVPCamera.dvpOpenByName(Select.Text, dvpOpenMode.OPEN_NORMAL, ref m_handle);//打开
//注册视频流回调函数
_proc = _dvpStreamCallback;
DVPCamera.dvpRegisterStreamCallback(m_handle, _proc, dvpStreamEvent.STREAM_EVENT_PROCESSED, m_ptr);
}
/*启动视频流*/
private void Show_Click(object sender, EventArgs e)
{
dvpStatus status = DVPCamera.dvpStart(m_handle);//启动视频流
//dvpStatus status = DVPCamera.dvpShowPropertyModalDialog(m_handle, this.Handle);//参数设置窗口
}
}
}
这个漏了,不指定平台调用API会报错