我在网上找的代码。 |
|
在网上找的代码就是很常用的哪种
using System; usingSystem.Collections.Generic; usingSystem.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; usingSystem.Runtime.InteropServices; namespace WebcamMini { publicpartialclassWebcam: Form { public Webcam() { InitializeComponent(); } constshort WM_CAP = 1024; constint WM_CAP_DRIVER_CONNECT = WM_CAP + 10; constint WM_CAP_DRIVER_DISCONNECT = WM_CAP + 11; constint WM_CAP_EDIT_COPY = WM_CAP + 30; constint WM_CAP_SET_PREVIEW = WM_CAP + 50; constint WM_CAP_SET_PREVIEWRATE = WM_CAP + 52; constint WM_CAP_SET_SCALE = WM_CAP + 53; constint WS_CHILD = 1073741824; constint WS_VISIBLE = 268435456; constshort SWP_NOMOVE = 2; constshort SWP_NOSIZE = 1; constshort SWP_NOZORDER = 4; constshort HWND_BOTTOM = 1; int iDevice = 0; int hHwnd; [System.Runtime.InteropServices.DllImport(“user32”, EntryPoint = “SendMessageA”)] staticexternint SendMessage(int hwnd, int wMsg, int wParam, [MarshalAs(UnmanagedType.AsAny)] object lParam); [System.Runtime.InteropServices.DllImport(“user32”, EntryPoint = “SetWindowPos”)] staticexternint SetWindowPos(int hwnd, int hWndInsertAfter, int x, int y, int cx, int cy, int wFlags); [System.Runtime.InteropServices.DllImport(“user32”)] staticexternbool DestroyWindow(int hndw); [System.Runtime.InteropServices.DllImport(“avicap32.dll”)] staticexternint capCreateCaptureWindowA(string lpszWindowName, int dwStyle, int x, int y, int nWidth, short nHeight, int hWndParent, int nID); [System.Runtime.InteropServices.DllImport(“avicap32.dll”)] staticexternbool capGetDriverDescriptionA(short wDriver, string lpszName, int cbName, string lpszVer, int cbVer); privatevoid OpenPreviewWindow() { int iHeight = 150; int iWidth = 150; // // Open Preview window in picturebox // hHwnd = capCreateCaptureWindowA(iDevice.ToString(), (WS_VISIBLE | WS_CHILD), 0, 0, 640, 480, picCapture.Handle.ToInt32(), 0); // // Connect to device // if (SendMessage(hHwnd, WM_CAP_DRIVER_CONNECT, iDevice, 0) == 1) { // // Set the preview scale // SendMessage(hHwnd, WM_CAP_SET_SCALE, 1, 0); // // Set the preview rate in milliseconds // SendMessage(hHwnd, WM_CAP_SET_PREVIEWRATE, 66, 0); // // Start previewing the image from the camera // SendMessage(hHwnd, WM_CAP_SET_PREVIEW, 1, 0); // // Resize window to fit in picturebox // SetWindowPos(hHwnd, HWND_BOTTOM, 0, 0, iWidth, iHeight, (SWP_NOMOVE | SWP_NOZORDER)); } else { // // Error connecting to device close window // DestroyWindow(hHwnd); } } privatevoid ClosePreviewWindow() { // // Disconnect from device // SendMessage(hHwnd, WM_CAP_DRIVER_DISCONNECT, iDevice, 0); // // close window // DestroyWindow(hHwnd); } privatevoid TakePhotos() { // TODO: …. } privatevoid Webcam_Load(object sender, EventArgs e) { iDevice = 0; OpenPreviewWindow(); } } } |
|
有没有什么好办法呢? |
|
这是一个老问题了。不知道有没有解决
|
|
什么时候的问题了。。
|
|
我看网上也有很多这个问题。日期是以前的。 |
|
求教求教啊啊啊
|
|
没有人回答么?
|
|
不会 求学习 |
|
先顶顶,研究研究
|
|
10分 |
如果全是代码控制的话,结束的时候有关闭摄像头功能的代码吗?如果只是想调用摄像头,可以直接打开程序或者程序的快捷方式
|
10分 |
这个方式 够独特,够简单。 你是不是有的时候没有释放资源,所以打不开了。 |
我又查了一下。知道为什么了。。是因为驱动的原因。
如果是即插即用的摄像头直接调用也好使但是不稳定。有的时候就会弹出选择视频源对话框。 谢谢大家。 |
|
20分 |
这个我以前也遇到过,也是用即插即用的免驱动摄像头,代码也是网上下的。开始也遇到和你一样的问题,后来我怒了,根据SendMessageA的函数原型自己重新写了Import引用方法,还把初始化摄像头获得显示控件句柄的方法移到类创建时就执行,而非在打开摄像头前。后来就再也没有问题了~
|
10分 |
用API一下
|
高手。。可不可以把你写的给我发一份我学习一下。谢谢 kkilll_123@163.com |
|
50分 |
其实根本不需要楼主你那么做,给你个DEMO的地址,纯C#的,不需要调用API,直接打开网络摄像头的,绝对物有所值,别忘了给点分哦!!!http://www.codesoso.com/code/Motion_Detection.aspx
|
来学习一下!
|
|
我也碰到这个问题了,有解决方法了吗?
|
|
偶也遇到这个问题
|
|
线程阻塞 有另一个程序也开了相同的线程 把那个线程关了就行了
|
|
俺今年也想用C#加avicap32.dll控制USB摄像头,结果也遇到这个问题,家里穷电脑上就一个摄像头,还老弹出选择视频源的框,你说烦不烦啊。俺也没本事像15楼高手重写SendMessageA,只好另开一个线程,有findwindowEX找到选择视频源对话框,用程序模拟点确定。
基本代码是这样: 加上定义和引用: private const uint BM_CLICK = 0xF5; //鼠标点击的消息,对于各种消息的数值,查API手册,也可用VS2010自带的SPY++ [DllImport(“user32.dll”, EntryPoint = “SendMessage”, SetLastError = true, CharSet = CharSet.Auto)] private static extern int SendMessage(IntPtr hwnd, uint wMsg, IntPtr wParam, int lParam); //开个线程准备关闭对话框 |
|
能分享吗?谢谢大哥哥
|
|
可以给我一份解决问题的代码吗,跪求!谢谢! |
|
|
|
Quote: 引用 15 楼 bingejesse 的回复:
这个我以前也遇到过,也是用即插即用的免驱动摄像头,代码也是网上下的。开始也遇到和你一样的问题,后来我怒了,根据SendMessageA的函数原型自己重新写了Import引用方法,还把初始化摄像头获得显示控件句柄的方法移到类创建时就执行,而非在打开摄像头前。后来就再也没有问题了~ 可以给我一份解决问题的代码吗,跪求!谢谢!1265759912@qq.com |