CSPromex
¿Quieres reaccionar a este mensaje? Regístrate en el foro con unos pocos clics o inicia sesión para continuar.


Programadores dedicados a C sharp .Net, eres nuevo, experto o quieres aprender a programar en C Sharp, aquí encontraras todo lo que necesitas.
 
ÍndiceBuscarÚltimas imágenesChatRegistrarseConectarse
Conectarse
Nombre de Usuario:
Contraseña:
Entrar automáticamente en cada visita: 
:: Recuperar mi contraseña
Últimos temas
» Sockets Conexion,Envio y recepcion de datos (mini-chat Cliente-Servidor)
Proyecto: Cámara web utilizando API's I_icon_minitimeSáb Sep 30, 2023 6:24 pm por EurekaMartin

» Graficos: Grafica circular
Proyecto: Cámara web utilizando API's I_icon_minitimeMar Mar 05, 2019 4:58 pm por Luis Garcia

» Calendario hecho Manualmente
Proyecto: Cámara web utilizando API's I_icon_minitimeMar Mar 05, 2019 3:52 pm por Luis Garcia

» Activar el protector de pantalla.
Proyecto: Cámara web utilizando API's I_icon_minitimeMar Mar 05, 2019 3:12 pm por Luis Garcia

» Hacer backup de MySql desde C#
Proyecto: Cámara web utilizando API's I_icon_minitimeMar Abr 18, 2017 10:04 pm por maurifl

» Sockets programa para Ciber Cafe (Cliente-Servidor)
Proyecto: Cámara web utilizando API's I_icon_minitimeLun Ago 10, 2015 5:45 pm por artes

» Ayuda crear emoticones en un chat
Proyecto: Cámara web utilizando API's I_icon_minitimeDom Jul 12, 2015 9:00 pm por yeco96

» Necesito ayuda para pasar datos a un Datagridview
Proyecto: Cámara web utilizando API's I_icon_minitimeDom Jun 07, 2015 4:33 pm por rafaelfa

» Reproductor de música->Lista de reproducción (Guardar-Cargar)
Proyecto: Cámara web utilizando API's I_icon_minitimeLun Jun 01, 2015 3:00 pm por kevin22

Buscar
 
 

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

 

 Proyecto: Cámara web utilizando API's

Ir abajo 
2 participantes
AutorMensaje
Luis Garcia
STAFF TEAM
STAFF TEAM
Luis Garcia


Mensajes : 64
Puntos : 112

Proyecto: Cámara web utilizando API's Empty
MensajeTema: Proyecto: Cámara web utilizando API's   Proyecto: Cámara web utilizando API's I_icon_minitimeDom 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
HRM
Novato
HRM


Mensajes : 1
Puntos : 4

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

Excelentisimio (y)
Volver arriba Ir abajo
 
Proyecto: Cámara web utilizando API's
Volver arriba 
Página 1 de 1.

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