废话到此,直接上代码
private const int ws_child = 0x40000000; //1073741824
private const int ws_visible = 0x10000000; //268435456
private const int wm_user = 0x400; //1024
private const int wm_cap_start = wm_user; //1024
private const int wm_cap_stop = wm_cap_start + 68; //1092
private const int wm_cap_driver_connect = wm_cap_start + 10; //1034
private const int wm_cap_driver_disconnect = wm_cap_start + 11; //1035
private const int wm_cap_savedib = wm_cap_start + 25; //1049
private const int wm_cap_grab_frame = wm_cap_start + 60; //1084
private const int wm_cap_sequence = wm_cap_start + 62; //1086
private const int wm_cap_file_set_captrue_filea = wm_cap_start + 20; //1044
private const int wm_cap_sequence_nofile = wm_cap_start + 63; //1087
private const int wm_cap_capture_image_clipboard = wm_cap_start + 30; //1054 复制捕捉的图像到剪切板
private const int wm_cap_set_overlay = wm_cap_start + 51; //1075
private const int wm_cap_set_preview = wm_cap_start + 50; //1074
private const int wm_cap_set_callback_videostream = wm_cap_start + 6; //1030
private const int wm_cap_set_callback_error = wm_cap_start + 2; //1026
private const int wm_cap_set_callback_statusa = wm_cap_start + 3; //1027
private const int wm_cap_set_callback_frame = wm_cap_start + 5; //1029
private const int wm_cap_set_scale = wm_cap_start + 53; //1077
private const int wm_cap_set_previewrate = wm_cap_start + 52; //1076
private const int wm_cap_dlg_videosource = wm_cap_start + 42; //1066 选择摄像头
/// <summary>
/// 开启视频摄像头
/// </summary>
/// <returns></returns>
public static void start()
{
if (bworkstart)
{
return;
}
byte[] lpszname = new byte[100];
try
{
hwndc = windows.capcreatecapturewindow(lpszname, ws_child | ws_visible, mleft, mtop, mwidth, mheight, mcontrolptr, 0);
if (hwndc.toint32() != 0)
{
windows.sendmessage(hwndc, wm_cap_set_callback_videostream, 0, 0); //设置返回视频流
windows.sendmessage(hwndc, wm_cap_set_callback_error, 0, 0); //设置返回错误
windows.sendmessage(hwndc, wm_cap_set_callback_statusa, 0, 0); //设置返回状态
//=====================这条比较慢=======================
windows.sendmessage(hwndc, wm_cap_driver_connect, 0, 0); //设备连接
//=====================================================
//windows.sendmessage(hwndc, wm_cap_sequence, 0, 0); //开始捕捉
//=====================================================
windows.sendmessage(hwndc, wm_cap_set_scale, 1, 0); //设置比例
windows.sendmessage(hwndc, wm_cap_set_previewrate, 66, 0); //设置预览速度
windows.sendmessage(hwndc, wm_cap_set_overlay, 1, 0); //设置叠加
windows.sendmessage(hwndc, wm_cap_set_preview, 1, 0); //设置预览
bworkstart = true;
}
//return true;
}
catch (exception)
{
//return false;
}
//finally
//{
//写日志 global.log.write( “sendmessage “);
//logclass.writelog("sendmessage");
//}
}
/// <summary>
/// 关闭视频摄像头
/// </summary>
public static void stop()
{
windows.sendmessage(hwndc, wm_cap_driver_disconnect, 0, 0);
bworkstart = false;
}
/// <summary>
/// 抓图或者拍照,然后保存到指定路径下
/// </summary>
/// <param name="path">要保存bmp文件的路径</param>
public static void grabimage(string path)
{
intptr hbmp = marshal.stringtohglobalansi(path);
windows.sendmessage(hwndc, wm_cap_savedib, 0, hbmp.toint32()); //0x41e
}
/// <summary>
/// 捕捉图像复制到剪切板
/// </summary>
/// <returns></returns>
public static bool copytoclipboard()
{
return windows.sendmessage(hwndc, wm_cap_capture_image_clipboard, 0, 0);
}
【说明】:本文章由站长整理发布,文章内容不代表本站观点,如文中有侵权行为,请与本站客服联系(QQ:254677821)!