Luis Garcia STAFF TEAM
Mensajes : 64 Puntos : 112
| Tema: Proyecto: Cámara web utilizando API's Dom Mar 27, 2011 10:17 am | |
| [Tienes que estar registrado y conectado para ver esa imagen]Este proyecto fue realizado para recibir imágenes desde la cámara web, veamos como funciona: Para empezar necesitamos agregar un pictureBox y dos botones. También un control de tipo "timer" con un intervalo de tiempo de 50 (Interval=50). Agregamos el using "System.Runtime.InteropServices;" para interactuar con los servicios COM. Dentro de la clase principal agregamos las siguientes variables: - Código:
-
bool bStop = true; /* Sirve para decirle al programa cuando detener la captura de imágenes */ private int mCapHwnd; private int m_Ancho = 463; private int m_Alto = 314; /* Son constantes que representan el tamaño con que la cámara obtendrá las capturas */
Procedemos con las declaraciones de las funciones API que colocaremos enseguida al código anterior: - Código:
-
#region Declaraciones del API
[DllImport("user32", EntryPoint = "SendMessage")] public static extern int SendMessage(int hWnd, uint Msg, int wParam, int lParam);
[DllImport("avicap32.dll", EntryPoint = "capCreateCaptureWindowA")] public static extern int VentanaDeVideo(string Nombre, int dwStyle, int X, int Y, int nAncho, int nAlto, int Padre, int nID);
[DllImport("user32", EntryPoint = "OpenClipboard")] public static extern int OpenClipboard(int hWnd);
[DllImport("user32", EntryPoint = "EmptyClipboard")] public static extern int EmptyClipboard();
[DllImport("user32", EntryPoint = "CloseClipboard")] public static extern int CloseClipboard();
#endregion
Ingresamos las constantes del API para la cámara web: - Código:
-
#region API Constantes
public const int WM_USER = 1024;
public const int WM_CAP_CONNECT = 1034; public const int WM_CAP_DISCONNECT = 1035; public const int WM_CAP_GET_FRAME = 1084; public const int WM_CAP_COPY = 1054;
public const int WM_CAP_START = WM_USER;
const int WM_CAP_SET_PREVIEWRATE = WM_USER + 52;
public const int WM_CAP_DLG_VIDEOFORMAT = WM_CAP_START + 41; public const int WM_CAP_DLG_VIDEOSOURCE = WM_CAP_START + 42; public const int WM_CAP_DLG_VIDEODISPLAY = WM_CAP_START + 43; public const int WM_CAP_GET_VIDEOFORMAT = WM_CAP_START + 44; public const int WM_CAP_SET_VIDEOFORMAT = WM_CAP_START + 45; public const int WM_CAP_DLG_VIDEOCOMPRESSION = WM_CAP_START + 46; public const int WM_CAP_SET_PREVIEW = WM_CAP_START + 50;
#endregion
Constantes ya definidas para determinadas funciones, es decir si el dispositivo obtuviera "1034" conectaría la cámara web. Ahora declaramos los métodos que realizaran el trabajo: - Código:
-
public void Iniciar() //iniciar captura de video { try { // Configura la ventana de captura mCapHwnd = VentanaDeVideo("WebCam", 0, 0, 0, m_Ancho, m_Alto, this.Handle.ToInt32(), 0); // Se Conecta el dispositivo de video Application.DoEvents(); SendMessage(mCapHwnd, WM_CAP_CONNECT, 0, 0); SendMessage(mCapHwnd, WM_CAP_SET_PREVIEWRATE, 30, 0); SendMessage(mCapHwnd, WM_CAP_SET_PREVIEW, 0, 0); CamRecorrido.Start(); //empieza la captura bStop = false;
}
catch (Exception ) {MessageBox.Show("Error Con la Camara\r\n\n"); } }
public void Detener()//Detiene la captura de video { try { bStop = true; this.CamRecorrido.Stop();//timer se detiene
Application.DoEvents(); SendMessage(mCapHwnd, WM_CAP_DISCONNECT, 0, 0); }
catch (Exception excep) { }
} #endregion
En el evento tick del timer: - Código:
-
SendMessage(mCapHwnd, WM_CAP_GET_FRAME, 0, 0); SendMessage(mCapHwnd, WM_CAP_COPY, 0, 0);
this.CamRecorrido.Stop();
ptbCam.Image = Clipboard.GetImage(); Application.DoEvents(); if (!bStop) this.CamRecorrido.Start();
Ahora colocaremos en el evento click del primer botón que nos servirá para iniciar la captura desde la cámara web: - Código:
-
Iniciar();
Y en el evento click del segundo: - Código:
-
Detener();
Y eso es todo, solo queda recordar que una cámara web funciona recibiendo una imagen cierto tiempo, formando así la ilusión de movimiento, en el programa recibo la imagen desde la camara web cada 50 milisegundos y la despliego en el picturebox, copiando la imagen de la camara al porta papeles de windows y del porta papeles al picturebox. [Tienes que estar registrado y conectado para ver este vínculo] | |
|
HRM Novato
Mensajes : 1 Puntos : 4
| Tema: Re: Proyecto: Cámara web utilizando API's Lun Mar 28, 2011 1:42 pm | |
| | |
|