Bueno amigos estoy desarrollando un programa para capturar imagenes desde una webcam el prototipo funciona perfectamente, pero no con la camara que necesito que funcione( microsoft LifeCam nx-6000), el problema es que al parecer no me deja conectar con el driver de la camara ya que al probar con otra camara (estando esta capturando imagenes desde el asistente de windows)el programa no detecto el driver y la pantalla dde la aplicacion quedo negra tal como lo hace con la LifeCam de microsoft ya no se que hacer espero puedan ayudarme con este problema, aca pego el codigo para que lo revisen (en el form solo inserten solo un picturebox y agreguen using System.Runtime.InteropServices;)
private void Form1_Load(object sender, EventArgs e) { Video cap = new Video(); System.IntPtr Handle; Handle = this.pictureBox1.Handle; GetVersionEx(); if (cap.ventana(Handle.ToInt32()) == true) { if (cap.conectar() == true) { if (cap.capturar() == false) MessageBox.Show("No se pudo iniciar la captura"); } else MessageBox.Show("No se pudo encontrar el driver"); } else MessageBox.Show("No se pudo crear ventana de captura"); }
class Video { private int hwndc; private const int WS_CHILD = (int)0x40000000; private const int WS_VISIBLE = (int)0x10000000; private const short WM_USER = (short)0x00000400; private const int WM_CAP_DRIVER_CONNECT = WM_USER + 10; private const int WM_CAP_DRIVER_DISCONNECT = WM_USER + 11; private const int WM_CAP_SET_PREVIEW = WM_USER + 50; private const int WM_CAP_SET_PREVIEWRATE = WM_USER + 52;
[DllImport("avicap32.dll")] public extern static int capCreateCaptureWindowA(string lpsNombre, int dwStilo, int xpi, int ypi, int Ancho, int Alto, int hwndParent, int nID); [DllImport("user32.dll")] public extern static int SendMessageA(int hWnd, int wMsg, short wParam, int lParam);
public bool ventana(int Handle) { hwndc = capCreateCaptureWindowA("Ventana de Captura", WS_VISIBLE | WS_CHILD, 0, 0, 320, 240, Handle, 0); if (hwndc != 0) { return true; } else { return false; } } public bool conectar() { int r1; r1 = SendMessageA(hwndc, WM_CAP_DRIVER_CONNECT, 0, 0); if (r1 != 0) { return true; } else { return false; } }
public bool capturar() { int r1, r2; r1 = SendMessageA(hwndc, WM_CAP_SET_PREVIEWRATE, 66, 0); if (r1 != 0) { r2 = SendMessageA(hwndc, WM_CAP_SET_PREVIEW, 1, 0); if (r2 != 0) { return true; } else { return false; } } else {
return false; } } } |
Hola Scam, yo tambien me tope con ese detalle, utilizando el avicap32.dll y no me levantaba la camara microsoft LifeCam nx-6000 y otras tampoco, por lo que buscando y probando me tope con lo DirectShow [DirectShowLib-2005.dll]y con este ya pude levantar y probarlo.
Saludos
Si esta respuesta resuelve tu duda, por favor pulsa en la de este mensaje. Gracias. |