Programadores dedicados a C sharp .Net, eres nuevo, experto o quieres aprender a programar en C Sharp, aquí encontraras todo lo que necesitas.
 
ÍndiceCalendarioFAQBuscarMiembrosGrupos de UsuariosChatRegistrarseConectarse
Conectarse
Nombre de Usuario:
Contraseña:
Entrar automáticamente en cada visita: 
:: Recuperar mi contraseña
Últimos temas
Buscar
 
 

Resultados por:
 
Rechercher Búsqueda avanzada
Síguenos:
Crear foro Crear foro Crear foro

Comparte | 
 

 Proyecto: Cámara web utilizando API's

Ver el tema anterior Ver el tema siguiente Ir abajo 
AutorMensaje
Luis Garcia
STAFF TEAM
STAFF TEAM


Mensajes : 61
Puntos : 109

MensajeTema: 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]

Volver arriba Ir abajo
Ver perfil de usuario
HRM
Novato


Mensajes : 1
Puntos : 4

MensajeTema: Re: Proyecto: Cámara web utilizando API's   Lun Mar 28, 2011 1:42 pm

Excelentisimio (y)
Volver arriba Ir abajo
Ver perfil de usuario
 
Proyecto: Cámara web utilizando API's
Ver el tema anterior Ver el tema siguiente Volver arriba 
Página 1 de 1.
 Temas similares
-
» Ensayo Proyecto Colectivo : Prueba2
» "cámara/micrófono" USB para la nueva ATV110
» [Resuelto]Alojar imagenes pero utilizando otro alojador que no sea SERVIM
» Cual seria el "Procedimiento perfecto" para el desarrollo de un proyecto...
» Insertar proyecto VBA con macros

Permisos de este foro:No puedes responder a temas en este foro.
CSPromex :: PROGRAMACIÓN EN C# :: Código abierto-
Cambiar a: