• Lunes 23 de Diciembre de 2024, 17:53

Autor Tema:  Captura Webcam En C#  (Leído 55178 veces)

Emperorxdevil

  • Nuevo Miembro
  • *
  • Mensajes: 13
    • Ver Perfil
Captura Webcam En C#
« en: Sábado 21 de Julio de 2007, 17:12 »
0
Hola a todos.

Aqui les dejo un clase propia para capturar imagenes con la webcam en C#

Esta clase, lista las cam's enchufafas al pc, captura fotos, permite redimensionar la imagen capturada antes de guardarla y elegir el formato de la imagen (jpg,bmp,etc)

Espero que les sirva.

Para usarla, declaren un nuevo objeto webcam.

En el constructor le dicen que frames /s capturara, un picturebox para mostrar la captura y un listbox ( en el que saldran las cam's detectadas).

Usen los metodos Listar, Capturar, StopCaptura y GuardarImagen


Espero que les sirva y les animo a mejorarla.

Namespaces Adicionales para que funcione la clase:
Código: Text
  1.  
  2. using System.Drawing;                              // Para Image
  3. using System.Drawing.Imaging;                // Para trabajar con imágenes
  4. using System.Drawing.Drawing2D;           // Para trabajar con Imágenes
  5. using System.Runtime.InteropServices;   // Para usar API
  6. using System.Windows.Forms;               // Para usar Formularios
  7.  
  8.  

Código: Text
  1.  
  2. public class WebCam  {
  3.    
  4.      // Conserva esta cabecera
  5.      // Empeorxdevil 2007
  6.    
  7.            class SaveImage {
  8.  
  9.           // Conserva esta cabecera
  10.           // Emperorxdevil 2007
  11.  
  12.                       /// <summary>
  13.                       /// Imagen que contiene la clase
  14.                       /// </summary>
  15.                       public  Image Tmp; //  referencia a la imagen del Picturebox Asociado
  16.                       Form Ref; // referencia que necesitare a este formulario
  17.                
  18.                         Form Opciones;
  19.                         GroupBox Gr;
  20.                         RadioButton R1;
  21.                         RadioButton R2;
  22.                         RadioButton R3;
  23.                         TextBox Porciento;
  24.                         TextBox Larg;        // Objetos necesarios para formar el diálogo
  25.                         TextBox Anch;
  26.                         Label L1;
  27.                         Label L2;
  28.                         Button Acepta;
  29.                         Button Cancelar;
  30.                    
  31.                         SaveFileDialog Sv;
  32.                         DialogResult rs;
  33.  
  34.  
  35.                 /// <summary>
  36.                 /// Constructor de clase SaveImage
  37.                 /// </summary>
  38.                 /// <param name="imagen">Imagen que se va a guardar</param>
  39.                 /// <param name="Interfaz"> Si se mostrará Interfaz</param>
  40.                 public SaveImage(Image imagen, bool Interfaz) {
  41.  
  42.                         Tmp=imagen; // Asigno la imagen...              
  43.                          Opciones= new Form();
  44.                          Ref=Opciones;
  45.                          Opciones.Width=333;     // Configuracion
  46.                          Opciones.Height=198;
  47.                          Opciones.Text="Parámetros de Imagen";
  48.                          Opciones.ControlBox=false;
  49.                          Opciones.ShowInTaskbar=false;
  50.                          Opciones.FormBorderStyle=FormBorderStyle.FixedDialog;
  51.  
  52.                              Gr= new GroupBox();
  53.                              Gr.Width=288;
  54.                              Gr.Height=105;
  55.                              Gr.Text="Configuración";
  56.                              Gr.Location= new Point(18,15);  
  57.                             Porciento= new TextBox();    
  58.                             Porciento.Enabled=false;                   // Configuracion
  59.                             Porciento.Text="";    
  60.                             Porciento.Width=37;
  61.                             Porciento.Height=20;
  62.                             Porciento.MaxLength=3;
  63.                             Porciento.TextAlign=HorizontalAlignment.Center;
  64.                             Porciento.Location= new Point(147,47);
  65.                                 R1= new RadioButton();
  66.                                 R1.Text="Guardar con Dimensiones Actuales";
  67.                                 R1.Width=191;
  68.                                 R1.Height=17;
  69.                                 Gr.Controls.Add(R1);
  70.                                 R1.Location= new Point(18,25);                                  
  71.                                 R2 = new RadioButton();
  72.                                 R2.CheckedChanged += new EventHandler(R2_CheckedChanged);
  73.                                 R2.Text="Reducir tamaño al";
  74.                                 R2.Width = 115;             // Configuracion
  75.                                 R2.Height = 17;
  76.                                 R2.Location= new Point(18,48);
  77.                                 Gr.Controls.Add(R2);
  78.                                 Gr.Controls.Add(Porciento);
  79.                                 L1 = new Label();
  80.                                 L1.Text="%";
  81.                                 L1.AutoSize=true;
  82.                                 L1.Location= new Point(195,50);
  83.                                 Gr.Controls.Add(L1);
  84.                                 R3 = new RadioButton();
  85.                                 R3.CheckedChanged += new EventHandler(R3_CheckedChanged);
  86.                                 R3.Text="Cambiar tamaño a"; // Configuracion
  87.                                 R3.Width=113;
  88.                                 R3.Height=17;
  89.                                 R3.Location= new Point(18,71);
  90.                                 Gr.Controls.Add(R3);
  91.                                 L2 = new Label();
  92.                                 L2.Text="X";
  93.                                 L2.AutoSize=true;
  94.                                 L2.Location=new Point(195,75);
  95.                                 Gr.Controls.Add(L2);
  96.                     Larg= new TextBox();
  97.                     Larg.Enabled=false;
  98.                     Larg.Width=37;
  99.                     Larg.Height=20;
  100.                     Larg.MaxLength=4;
  101.                     Larg.TextAlign=HorizontalAlignment.Center;
  102.                     Larg.Location= new Point(147,71);
  103.                     Gr.Controls.Add(Larg);
  104.  
  105.                     Anch= new TextBox();
  106.                     Anch.Enabled=false;
  107.                     Anch.Width=37;
  108.                     Anch.Height=20;
  109.                     Anch.MaxLength=4;
  110.                     Anch.TextAlign=HorizontalAlignment.Center; // Configuracion
  111.                     Anch.Location= new Point(218,70);
  112.                     Gr.Controls.Add(Anch);                    
  113.  
  114.                            Acepta= new Button();
  115.                            Acepta.Text="Aceptar";
  116.                            Acepta.Width=59;
  117.                            Acepta.Height=26;
  118.                            Acepta.Location= new Point(247,133);
  119.                            Acepta.Click += new EventHandler(Acepta_Click);
  120.  
  121.                            Cancelar= new Button();
  122.                            Cancelar.Text="Cancelar";
  123.                            Cancelar.Width= 59;
  124.                            Cancelar.Height=26;
  125.                            Cancelar.Location= new Point(18,133);
  126.                            Cancelar.Click += new EventHandler(Cancelar_Click);
  127.                                 Opciones.Controls.Add(Gr);
  128.                                 Opciones.Controls.Add(Acepta);
  129.                                 Opciones.Controls.Add(Cancelar);
  130.                                 Opciones.StartPosition=FormStartPosition.CenterScreen;
  131.                                 Opciones.ShowDialog();
  132.                      
  133.                 }
  134.  
  135.                
  136.                 /// <summary>
  137.                 /// Constructor de la clase SaveImage sin Interfaz
  138.                 /// </summary>
  139.                 /// <param name="imagen">Imagen a Guardar</param>
  140.                 public SaveImage(Image imagen) {
  141.                     Tmp = imagen; // Asigno la imagen...  
  142.                 }
  143.  
  144.                 void R3_CheckedChanged(object sender, EventArgs e)
  145.                {
  146.                    if (this.R3.Checked) { this.Anch.Enabled=true; this.Larg.Enabled=true;}
  147.                    else {this.Anch.Enabled=false; this.Larg.Enabled=false; }
  148.                }
  149.                 void R2_CheckedChanged(object sender, EventArgs e)
  150.                {
  151.                    if (this.R2.Checked) { this.Porciento.Enabled=true;}
  152.                    else { this.Porciento.Enabled=false; }
  153.                }
  154.                 void Acepta_Click(object sender, EventArgs e)
  155.                {
  156.                      try {
  157.                             if (R1.Checked|| R2.Checked||R3.Checked) {                
  158.                                    
  159.                              if (R2.Checked) {Tmp=Resize(Tmp,Convert.ToInt32(Porciento.Text));}
  160.                              
  161.                              if (R3.Checked) {Tmp=Resize(Tmp,Convert.ToInt32(Larg.Text),Convert.ToInt32(Anch.Text)); }      
  162.    
  163.                                    Sv= new SaveFileDialog(); // Creo un diálogo para salvar la imagen
  164.                                    Sv.Title = "Guardar imagen como..."; // Lo configuro
  165.                                    Sv.Filter = "Archivo JPG|*.jpg|Archivo PNG|*.png|Archivo GIF|*.gif|Mapa de Bits|*.bmp";
  166.                                    rs = Sv.ShowDialog(); // Lo muestro modal
  167.  
  168.  
  169.                                    if (rs == DialogResult.OK) {
  170.                                    
  171.                                        int x = Sv.FilterIndex; // Ontengo la extensión seleccionada  
  172.  
  173.                                        switch (x)
  174.                                        {
  175.                                            // Salvo la imagen en el formato deseado
  176.                                            case 1:
  177.                                                Tmp.Save(Sv.FileName, ImageFormat.Jpeg);
  178.                                                break;
  179.                                            case 2:
  180.                                                Tmp.Save(Sv.FileName, ImageFormat.Png);
  181.                                                break;
  182.                                            case 3:
  183.                                                Tmp.Save(Sv.FileName, ImageFormat.Gif);
  184.                                                break;
  185.                                            case 4:
  186.                                                Tmp.Save(Sv.FileName, ImageFormat.Bmp);
  187.                                                break;
  188.                                        }
  189.                                             Ref.Dispose(); // Cierro el formulario        
  190.                                    }
  191.                                 }
  192.                                 else { MessageBox.Show("Al menos debe selecionar una opción","xdevilWebCapture", MessageBoxButtons.OK, MessageBoxIcon.Warning); }
  193.  
  194.                                 }
  195.    
  196.                                 catch {
  197.                                     MessageBox.Show("Introduzca valores válidos", "xdevilWebCapture", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
  198.                                 }      
  199.  
  200.                }                
  201.                 void Cancelar_Click(object sender, EventArgs e)
  202.                 {
  203.                      Ref.Dispose(); // Cierro el formulario
  204.                 }
  205.  
  206.  
  207.  
  208.                 /// <summary>
  209.                 /// Escala la imagen capturada al % especificado
  210.                 /// </summary>
  211.                 /// <param name="foto"> Imagen que se quiere escalar </param>
  212.                 /// <param name="TantoPorCiento"> Porcentaje de reducción</param>
  213.                 /// <returns>Imagen escalada</returns>
  214.                 public Image Resize(Image foto,int TantoPorCiento) {
  215.  
  216.                         float Tporciento=((float)TantoPorCiento/100); // Obtengo el coeficiente de dimension                    
  217.                         int ImgOrAncho=foto.Width;
  218.                         int ImgOrAlto=foto.Height; // Obtengo las dimensiones originales de la foto
  219.  
  220.                         int OrigX=0;
  221.                         int OrigY=0;
  222.                         int ResX=0;  // Variables referencia para saber donde empiezo a contar px
  223.                         int ResY=0;
  224.  
  225.                         int ResAncho=(int)(ImgOrAncho*Tporciento);
  226.                         int ResAlto = (int)(ImgOrAlto * Tporciento); // Obtengo las dimensiones al % especificado    
  227.  
  228.                       Bitmap RszIm= new Bitmap(ResAncho,ResAlto,PixelFormat.Format24bppRgb); // Creo una imagen con esas dimensiones y bpp
  229.                       RszIm.SetResolution(foto.HorizontalResolution,foto.VerticalResolution); // Le doy la misma res. que la original
  230.                        
  231.                       Graphics Gfoto= Graphics.FromImage(RszIm); // Creo una intancia de Graphics para manejar la imagen nueva
  232.                       Gfoto.InterpolationMode= InterpolationMode.HighQualityBicubic; // Especifico la calidad del algoritmo de sampleo
  233.                       // De la foto original, obtengo la redimensionada (mediante un rectángulo)
  234.                       Gfoto.DrawImage(foto,new Rectangle(ResX,ResY,ResAncho,ResAlto),new Rectangle(OrigX,OrigY,ImgOrAncho,ImgOrAlto),GraphicsUnit.Pixel);  
  235.                       Gfoto.Dispose(); // Ya no me hace falta esto, asi que lo descargo
  236.  
  237.                         return(RszIm); // Devuelvo la imagen redimensionada
  238.                 }
  239.                 /// <summary>
  240.                 /// Redimensiona la imagen en pixeles
  241.                 /// </summary>
  242.                 /// <param name="foto"> Imagen a redimensionar</param>
  243.                 /// <param name="ancho">Ancho de la imagen</param>
  244.                 /// <param name="alto">Alto de la imagen</param>
  245.                 /// <returns>Imagen redimensionada</returns>
  246.                 public Image Resize(Image foto, int ancho, int alto) {
  247.  
  248.                             int ImgORAncho = foto.Width;
  249.                             int ImgOrAlto =  foto.Height; // Obtengo las dimensiones de la foto
  250.  
  251.                             int OrigX = 0;
  252.                             int OrigY = 0;
  253.                             int ResX = 0;  // Varables referencia para saber donde contar px
  254.                             int ResY = 0;
  255.  
  256.                             float Porciento = 0;
  257.                             float PorcientoAncho = 0; // Porcentajes de sampleo
  258.                             float PorcientoAlto = 0;
  259.  
  260.                     PorcientoAncho = ((float)ancho / (float)ImgORAncho);
  261.                     PorcientoAlto  = ((float)alto / (float)ImgOrAlto); //Calculo el % que puedo resamplear
  262.    
  263.                         if (PorcientoAlto  < PorcientoAncho){
  264.                                     Porciento  = PorcientoAlto; }
  265.                             else { // Para resamplear bien                
  266.                                     Porciento = PorcientoAncho; }
  267.                          
  268.  
  269.                     int AnchuraFinal = (int)(ImgORAncho  * Porciento);
  270.                     int AlturaFinal;  // Calculo las nuevas dimensiones                
  271.        
  272.                             if (ancho >alto) {
  273.                                         AlturaFinal = (int)(ImgOrAlto  * Porciento); }
  274.                                else {
  275.                                     AlturaFinal =AnchuraFinal;} // Para proporcionar la imagen
  276.  
  277.                     Bitmap RszIm = new Bitmap(ancho, alto,PixelFormat.Format24bppRgb);
  278.                     RszIm.SetResolution(foto.HorizontalResolution,foto.VerticalResolution);
  279.  
  280.                     Graphics Gfoto = Graphics.FromImage(RszIm);
  281.                     Gfoto.InterpolationMode =InterpolationMode.HighQualityBicubic;
  282.                     Gfoto.DrawImage(foto,new Rectangle(ResX, ResY, AnchuraFinal, AlturaFinal),new Rectangle(OrigX, OrigY, ImgORAncho , ImgOrAlto),GraphicsUnit.Pixel);
  283.                     Gfoto.Dispose();
  284.                     return (RszIm);
  285.  
  286.                 }
  287.  
  288.             } /// Clase que guarda las imágenes
  289.  
  290.              #region Funciones API
  291.  
  292.           [DllImport("user32.dll", EntryPoint = "SendMessage")]
  293.           public static extern int SendMessage(int hWnd, uint Msg, int wParam, int lParam);
  294.  
  295.           [DllImport("avicap32.dll", EntryPoint = "capCreateCaptureWindowA")]
  296.           public static extern int capCreateCaptureWindowA(string lpszWindowName, int dwStyle, int X, int Y, int nWidth, int nHeight, int hwndParent, int nID);
  297.  
  298.           [DllImport("user32.dll", EntryPoint = "EmptyClipboard")]
  299.           public static extern int EmptyClipboard();
  300.          
  301.           [DllImport ("avicap32.dll",EntryPoint="capGetDriverDescriptionA")]
  302.           public static extern bool capGetDriverDescriptionA(int wdriver,string lpszName,int cbName,string lpszVer,int cbVer);
  303.  
  304.          
  305.              #endregion
  306.  
  307.              #region Constantes API
  308.  
  309.           const int WM_USER = 1024;
  310.           const int WM_CAP_CONNECT = 1034;
  311.           const int WM_CAP_DISCONNECT = 1035;
  312.           const int WM_CAP_GET_FRAME = 1084;  // Constantes necesarias
  313.           const int WM_CAP_COPY = 1054;
  314.           const int WM_CAP_START = WM_USER;
  315.           const int WM_CAP_SET_PREVIEW = WM_CAP_START + 50;
  316.           const int WM_CAP_SET_PREVIEWRATE = WM_USER + 52;
  317.          
  318.        #endregion
  319.      
  320.              private int Frecuencia=0; // Frecuencia de captura de imagen  
  321.              private  int CamHandle=0; // Handle del dispositivo
  322.                      
  323.  
  324.              Timer reloj; // Timer
  325.              ComboBox Cbx; // Para referencia al Combobox
  326.              PictureBox Pbx; // Para referencia al Picturebox
  327.                        
  328.          
  329.         /// <summary>
  330.         /// Crea una instancia de la clase WebCam de Emperorxdevil
  331.         /// </summary>
  332.         /// <param name="frecuencia">Intervalo de tiempo en el que se capturarán las imágenes</param>
  333.         /// <param name="pct">PictureBox en el cual se mostrará lo capturado por la webcam</param>
  334.         /// <param name="cb"> Listbox en el que se mostrarán las Cams detectadas</param>
  335.         public WebCam(int frecuencia,PictureBox pct, ComboBox cb) {
  336.              
  337.             Frecuencia=frecuencia;
  338.             Pbx=pct;              // Inicio las variables necesarias
  339.             reloj= new Timer(); // Creo el timer
  340.             reloj.Tick += new EventHandler(reloj_Tick); // Le asigno el controlador  
  341.             reloj.Interval=Frecuencia; // Asigno la velocidad de captura
  342.             Cbx= cb; //Configuro la referencia
  343.            
  344.            }
  345.  
  346.         private void reloj_Tick(object sender, EventArgs e)
  347.         {
  348.  
  349.             SendMessage(CamHandle, WM_CAP_GET_FRAME,0,0); // Capturo la imagen
  350.             SendMessage(CamHandle, WM_CAP_COPY, 0, 0); // La copio al portapeles
  351.             Pbx.Image=Clipboard.GetImage(); // La mando al Picturebox
  352.             EmptyClipboard(); // Vacío el portapapeles
  353.            
  354.         }
  355.         /// <summary>
  356.         /// Listará las cámaras web encontradas en el Combobox asociado
  357.         /// </summary>
  358.         public void Listar() {
  359.                    
  360.               bool valor;
  361.               string nombre;    
  362.               string version;
  363.               int x=0;
  364.  
  365.                 do {
  366.                     nombre="Dispositivo"+x.ToString();
  367.                     valor=capGetDriverDescriptionA(x,nombre,100,"v1",100);
  368.                      if (valor) Cbx.Items.Add(nombre);
  369.                      x=x+1;
  370.                 } while (!valor==false);                      
  371.                    
  372.         }
  373.         /// <summary>
  374.         /// La WebCam se Encenderá y mostrará lo capturado en el PictureBox referenciado
  375.         /// </summary>
  376.         /// <param name="Dispositivo">Nº de dispositivo del Combobox</param>        
  377.         public void Capturar(int Dispositivo) {
  378.  
  379.                         try {
  380.                              
  381.                               StopCaptura(); // Antes de nada "reseteo" el dispositivo  
  382.                               CamHandle= capCreateCaptureWindowA("XdevilCapture"+Dispositivo.ToString(),0,0,0,0,0,Pbx.Handle.ToInt32(),Dispositivo); // Obtengo el Handle de la cam
  383.                               SendMessage(CamHandle, WM_CAP_CONNECT, 0, 0); // Enciendo la cam
  384.                               SendMessage(CamHandle,WM_CAP_SET_PREVIEWRATE,30,0); // Establezco los frames de captura /seg
  385.                               SendMessage(CamHandle, WM_CAP_SET_PREVIEW,0,0); // Empiezo a capturar
  386.                               reloj.Start(); // Inicio la captura      
  387.                         }
  388.  
  389.                         catch (Exception e) {
  390.                               MessageBox.Show("No se puede Iniciar la WebCam","Error");              
  391.                         }
  392.  
  393.               }
  394.         /// <summary>
  395.         /// Detiene la captura de imágenes y apaga la WebCam
  396.         /// </summary>
  397.         public void StopCaptura() {
  398.  
  399.  
  400.                        try {
  401.                            reloj.Stop(); // Paro el reloj que captura
  402.                            SendMessage(CamHandle, WM_CAP_DISCONNECT, 0, 0); // Apago la cam
  403.                            EmptyClipboard(); // Vacío el portapapeles
  404.                          }
  405.  
  406.                         catch (Exception e) { } // No hago nada.. pa k ?
  407.  
  408.               }
  409.         /// <summary>
  410.         /// Muestra diferentes parametros configurables de la imagen que se va a guardar
  411.         /// </summary>
  412.         public void GuardarImagen() {
  413.                  
  414.                 SaveImage s= new SaveImage(Pbx.Image,true); // Creo la clase que guarda las fotos
  415.               }  
  416.        
  417.      
  418.     }
  419.  
  420.  
  421.  

Salu2

ProfesorX

  • Moderador
  • ******
  • Mensajes: 796
  • Nacionalidad: mx
    • Ver Perfil
Re: Captura Webcam En C#
« Respuesta #1 en: Domingo 22 de Julio de 2007, 04:01 »
0
Me intereso tu clase, pero creo que deberias poner el codigo completo que utilizaste (formularios, clases extra, etc.) ya que me marco los siguientes errores:

Código: Text
  1.  
  2. C:\CvsProjects\proyecto-x\alfa\jubilee\QuickGUI\GenericProgramming\WebCam.cs(26,20): error CS0246: No se puede encontrar el tipo o el nombre de espacio de nombres 'Image' (¿falta una directiva using o una referencia de ensamblado?)
  3. C:\CvsProjects\proyecto-x\alfa\jubilee\QuickGUI\GenericProgramming\WebCam.cs(27,13): error CS0246: No se puede encontrar el tipo o el nombre de espacio de nombres 'Form' (¿falta una directiva using o una referencia de ensamblado?)
  4. C:\CvsProjects\proyecto-x\alfa\jubilee\QuickGUI\GenericProgramming\WebCam.cs(29,13): error CS0246: No se puede encontrar el tipo o el nombre de espacio de nombres 'Form' (¿falta una directiva using o una referencia de ensamblado?)
  5.  
  6.  

y asi sucesivamente

Saludos :)

NOTA:
==================================================================
Este foro es para ayudar, aprender, compartir... usenlo para eso,
NO SE RESUELVEN DUDAS POR MENSAJE PRIVADO Y MENOS POR CORREO
==================================================================

Emperorxdevil

  • Nuevo Miembro
  • *
  • Mensajes: 13
    • Ver Perfil
Re: Captura Webcam En C#
« Respuesta #2 en: Domingo 22 de Julio de 2007, 06:01 »
0
Gracias por reportar el error.
Por los errores que me muestras, faltan los namespaces:
Código: Text
  1.  
  2. System.Drawing;             // Para Image
  3. System.Windows.Forms;   //  Para Form
  4.  
  5.  
Ya los inclui arriba.
Salu2

Neopro

  • Miembro MUY activo
  • ***
  • Mensajes: 316
    • Ver Perfil
Re: Captura Webcam En C#
« Respuesta #3 en: Lunes 23 de Julio de 2007, 16:44 »
0
Interesante...

Grax.
              [size=109]"Has lo que digo y no hagas lo que hago"[/size]

Geo

  • Miembro de PLATA
  • *****
  • Mensajes: 1011
  • Nacionalidad: mx
    • Ver Perfil
    • http://hsblog.mexchip.com
Re: Captura Webcam En C#
« Respuesta #4 en: Lunes 23 de Julio de 2007, 18:21 »
0
Precisamente ahorita estoy buscando información sobre cómo adquirir imágenes desde una webcam :), estoy viendo si uso AVIcap o WIA, gracias por el ejemplo ;).
La imaginación es el límite.
Hardware & Software | Mexchip

lesus

  • Nuevo Miembro
  • *
  • Mensajes: 2
    • Ver Perfil
Re: Captura Webcam En C#
« Respuesta #5 en: Lunes 13 de Agosto de 2007, 10:38 »
0
Hola!
Estoy intentando realizar una aplicación de captura de imágenes con webcam. He probado el código y obtengo este error:

"'webcam.Form1.Dispose(bool)': no suitable method found to override"

He de decir que aún no la tengo conectada porque todavía no dispongo de ella, puede ser ese el problema?
Gracias de antemano. Saludos

jesusjones

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
    • http://jesus.vientopm.com.mx
Re: Captura Webcam En C#
« Respuesta #6 en: Jueves 13 de Diciembre de 2007, 21:10 »
0
muchas gracias :D, el código está genial...

por cierto modifique esta línea

Código: Text
  1.  
  2. public static extern bool capGetDriverDescriptionA(int wdriver, string lpszName, int cbName, string lpszVer, int cbVer);
  3.  
  4.  

por esta
Código: Text
  1.  
  2. public static extern bool capGetDriverDescriptionA(int wDriverIndex, [MarshalAs(UnmanagedType.VBByRefStr)]ref String lpszName, int cbName, [MarshalAs(UnmanagedType.VBByRefStr)] ref String lpszVer, int cbVer);
  3.  
  4.  

así cuando listas en el combobox los devices, te aparece su nombre y no "dispositivo0"

Listar quedó así:

Código: Text
  1.  
  2. public void Listar()
  3.         {
  4.             bool valor;
  5.             String nombre = "".PadRight(100);&#59;
  6.             String version = "".PadRight(100);&#59;
  7.             int x = 0;
  8.             do
  9.             {
  10.                 valor = capGetDriverDescriptionA(x, ref nombre, 100, ref version, 100);
  11.                 if (valor)
  12.                 {
  13.                     Cbx.Items.Add(nombre + " " + version);
  14.                 }
  15.  
  16.                 x = x + 1;
  17.  
  18.             } while (!valor == false);
  19.         }
  20.  
  21.  

HernanSaiz

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
Re: Captura Webcam En C#
« Respuesta #7 en: Jueves 13 de Marzo de 2008, 23:11 »
0
hola, tu ejemplo funciono bien, excepto cuando quise separar en dos botones las funcionalidades: en el boton1 puse listar y capturar y en el boton2 puse stopcaptura y guardarimagen.
El problema es el ambito de la clase WebCam. En donde tengo que definir la la clase para que los metodos se vean de ambos botones?
Desde ya muchas gracias. Salu2 :blink:

Tonio

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
Re: Captura Webcam En C#
« Respuesta #8 en: Viernes 4 de Abril de 2008, 05:55 »
0
Soy estudiante.
Copio el codigo.
lo ejecuto.
pero me marca error en EventArgs
Error   1   No se puede encontrar el tipo o el nombre de espacio de nombres 'EventArgs' (¿falta una directiva using o una referencia de ensamblado?)   C:\Documents and Settings\Administrador\Mis documentos\Visual Studio 2005\Projects\WindowsApplication1\WindowsApplication1\WebCam.cs   154   51   WindowsApplication1


quisiera saber si me pueden ayudar gracias.

pakoflako

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
Re: Captura Webcam En C#
« Respuesta #9 en: Domingo 6 de Abril de 2008, 10:36 »
0
Sorprendente  :o , la verdad es ke ocupaba esta clase muchisimo
para un proyecto de seguridad que estoy realizando en la universidad  :smartass:,
Muchas gracias  :D , Me funciono perfecto..!!   ;) , Sale

Arcangel_Asesino

  • Nuevo Miembro
  • *
  • Mensajes: 7
    • Ver Perfil
Re: Captura Webcam En C#
« Respuesta #10 en: Lunes 5 de Mayo de 2008, 09:56 »
0
hola soy nuevo pro este foro peor tengo un problema con la clase que posteaste tengo conectadas 2 cámaras web pero solo me reconoce 1 no sabes por que yo le he buscado la forma pero aun no se por que solo me reconoce de hecho no se si sea por que ambas cámaras usan el "Microsoft WDM Image Capture (Win32)"  :blink: y de hecho con la modificación es el único elemento que parece aunque el sistema si reconoce las 2 cam ya que las puedo activar desde los dispositivos que parecen en la carpeta de " Mi PC" me gustaría saber el por que y como arreglar ese detalle por que no he encontrado como hacerlo ... de todas formas sigo buscando gracias...
  :comp:

Agrego....

ya busque un poco mas y si agrego la constante
Código: Text
  1.  
  2. const int WM_CAP_DLG_VIDEODISPLAY = WM_CAP_START + 42;
  3.  
  4.  
y lo mando como mensaje
Código: Text
  1.  
  2. SendMessage(CamHandle, WM_CAP_DLG_VIDEODISPLAY, 0, 0);
  3.  
  4.  
aparece una ventana de modificación y puedo cambiar de la cámara de entrada pero aun cuando tenga 2 objetos de la clase la camptura se cambia en objetos y no me permite tener el video de ambas cámaras al mismo tiempo...

Seguiré buscando ... :comp:

si alguien encuentra la disolución se lo agradecería muchísimo...

madeinchiapas

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
Re: Captura Webcam En C#
« Respuesta #11 en: Martes 21 de Julio de 2009, 20:08 »
0
Cita de: "Arcangel_Asesino"
hola soy nuevo pro este foro peor tengo un problema con la clase que posteaste tengo conectadas 2 cámaras web pero solo me reconoce 1 no sabes por que yo le he buscado la forma pero aun no se por que solo me reconoce de hecho no se si sea por que ambas cámaras usan el "Microsoft WDM Image Capture (Win32)"  :blink: y de hecho con la modificación es el único elemento que parece aunque el sistema si reconoce las 2 cam ya que las puedo activar desde los dispositivos que parecen en la carpeta de " Mi PC" me gustaría saber el por que y como arreglar ese detalle por que no he encontrado como hacerlo ... de todas formas sigo buscando gracias...
  :comp:

Agrego....

ya busque un poco mas y si agrego la constante
Código: Text
  1.  
  2. const int WM_CAP_DLG_VIDEODISPLAY = WM_CAP_START + 42;
  3.  
  4.  
y lo mando como mensaje
Código: Text
  1.  
  2. SendMessage(CamHandle, WM_CAP_DLG_VIDEODISPLAY, 0, 0);
  3.  
  4.  
aparece una ventana de modificación y puedo cambiar de la cámara de entrada pero aun cuando tenga 2 objetos de la clase la camptura se cambia en objetos y no me permite tener el video de ambas cámaras al mismo tiempo...

Seguiré buscando ... :comp:

si alguien encuentra la disolución se lo agradecería muchísimo...

Hola que tal arcangel oye ando realizando la misma aplicacion y podemos trabajar juntos en base a la informacion que cada uno haya recolectado te parece!  ;)
t dejo mi correo , es en hotmail : made.in.chiapas ... saludos

sangetzu

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
Re: Captura Webcam En C#
« Respuesta #12 en: Viernes 7 de Agosto de 2009, 08:22 »
0
hola que tal soy nuevo en el foro y no se si alguien me podria ayudar kon un programa el kual konsta de reguistrar un cliente pero tengo ke tomarle foto y guardarla en una base de datos en access  y en otra  sql, pero la berdad no se ni komo soy nuevo programando, si alguien me pudiera ayudar se lo agradeseria, deantemano grasias ¡este es un exelente foro!

Quicksilver

  • Miembro activo
  • **
  • Mensajes: 93
  • Nacionalidad: co
    • Ver Perfil
Re: Captura Webcam En C#
« Respuesta #13 en: Lunes 24 de Agosto de 2009, 07:23 »
0
Yo lo he hecho en c#, pero utilizando la librería de Open Cv para c#.

Por cierto, es una lastima, por que los errores del C tienen que ser tan complejos o poco subjetivos... en fin... aca les dejo el ejemplo, claro, primero es necesario que descarguen la librería, la instalen y hagan las respectivas referencias a las dll's.

Código:

CvCapture capture;

            capture = highgui.CvCreateCameraCapture(0);

            IplImage image;

            highgui.CvNamedWindow("LiveView", highgui.CV_WINDOW_AUTOSIZE);

            //none of these seems to work
            highgui.CvSetCaptureProperty(ref capture, highgui.CV_CAP_PROP_FRAME_WIDTH, 640);
            highgui.CvSetCaptureProperty(ref capture, highgui.CV_CAP_PROP_FRAME_HEIGHT, 480);
            highgui.CvSetCaptureProperty(ref capture, highgui.CV_CAP_PROP_FPS, 10);
           

            while (true)
            {
                image = highgui.CvQueryFrame(ref capture);
                highgui.CvShowImage("LiveView", ref image);

                int c = highgui.CvWaitKey(40);
                if (c == 27)
                    break;
            }

            highgui.CvReleaseCapture(ref capture);
            highgui.CvDestroyWindow("LiveView");

Es tan sencillo como poner un botón, y pegar el código.... claro, hay que conocer muy bien la librería.
Everything that has a beginning has an end

camilojaraba

  • Nuevo Miembro
  • *
  • Mensajes: 3
    • Ver Perfil
Re: Captura Webcam En C#
« Respuesta #14 en: Martes 20 de Octubre de 2009, 22:24 »
0
Hum...
no funciona el StopCaptura...

que será?

otra cosa... como hago para poder usar diferentes botones?
es decir, tengo un Form1, y dentro varios private donde estan los botones...
pero me toca crear un objeto por cada private pues si lo coloco en la cabecera para establecerlo como publico y poder usarlo en todos los demas objects, me sale un error referente a los parametros que le paso al constructor picturebox y combobox...

saludos y gracias!!!
pD: si tienen informacion acerca de si puedo trabajar del mismo modo con tarjetas tipo geovision para CCTV seria excelente!

CJ
colombia

tannke

  • Miembro MUY activo
  • ***
  • Mensajes: 152
  • Nacionalidad: es
    • Ver Perfil
Re: Captura Webcam En C#
« Respuesta #15 en: Miércoles 21 de Octubre de 2009, 17:30 »
0
Sobre lo 1º ahora mismo no se, no tengo con que provar, cuando llegue a casa intentare mirartelo.

Para lo 2º no se si te entiendo muy bien, podrias poner que tipo de objeto quieres declarar o mejor, poner el codigo de la declaración para ver exactamente como declaras y donde.

por ejemplo para declarar un bitmap podia ser:
Código: C#
  1.  
  2. public Form1()
  3.         {
  4.             InitializeComponent();
  5.         }
  6.         Bitmap dibujo;
  7.  
  8.         private void boton1(object sender, EventArgs e)
  9.         {
  10.             dibujo = Image.FromFile(@"C:direccion");
  11.         }
  12.   
  13.  
  14.  

o incluso ya declararla con un valor...

saludos;

camilojaraba

  • Nuevo Miembro
  • *
  • Mensajes: 3
    • Ver Perfil
Re: Captura Webcam En C#
« Respuesta #16 en: Miércoles 21 de Octubre de 2009, 18:43 »
0
Hum... gracias por responder!

mira, el codigo lo tengo así...
Código: C#
  1.  
  2. private void button1_Click(object sender, EventArgs e)
  3.         {
  4.             camaraweb camarita = new camaraweb(5, pictureimg, cmbcams);
  5.             camarita.Listar();
  6.         }
  7.  
  8.  
lo anterior para cada uno de los botones...

pero si lo coloco asi:
Código: C#
  1.  
  2. public partial class Form1 : Form
  3.     {
  4.         camaraweb camarita = new camaraweb(5, pictureimg, cmbcams);
  5.         public Form1()
  6.         {
  7.             InitializeComponent();    
  8.         }
  9.        
  10.         private void Form1_Load(object sender, EventArgs e)
  11.         {
  12.            
  13.         }
  14.  
  15.  
o lo coloco dentro del public form, me saca los errores:
Error   1   A field initializer cannot reference the non-static field, method, or property 'webcamcj.Form1.pictureimg'
Error   2   A field initializer cannot reference the non-static field, method, or property 'webcamcj.Form1.cmbcams'

gracias!

tannke

  • Miembro MUY activo
  • ***
  • Mensajes: 152
  • Nacionalidad: es
    • Ver Perfil
Re: Captura Webcam En C#
« Respuesta #17 en: Miércoles 21 de Octubre de 2009, 19:42 »
0
Uf ahora me pillas algo perdido... has probado con:

Código: C#
  1.  
  2.  
  3. public partial class Form1 : Form
  4.      {
  5.          camaraweb camarita;
  6.          public Form1()
  7.          {
  8.              InitializeComponent();    
  9.          }
  10.        
  11.          private void Form1_Load(object sender, EventArgs e)
  12.          {
  13.             camarita = new camaraweb(5, pictureimg, cmbcams);
  14.          }
  15.  
  16.  
  17.  

camilojaraba

  • Nuevo Miembro
  • *
  • Mensajes: 3
    • Ver Perfil
Re: Captura Webcam En C#
« Respuesta #18 en: Jueves 22 de Octubre de 2009, 00:06 »
0
jajajaja que chiste...
justo me habia funcionado cuando recibi la notificacion de tu post!

gracias!!!

sera que este metodo me servira para capturar una imagen de una tarjeta de CCTV??? tipo geovision, maxdvr, etc???

chau!

insth

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
Re: Captura Webcam En C#
« Respuesta #19 en: Domingo 8 de Noviembre de 2009, 07:59 »
0
Hola, soy  nuevo en el foro, La info me ha sido sumamente util, intentaré adaptarla a mis necesidades. Si Llego a hacerle modificaciones significativas intentaré postearlas. Gracias por la aportación.

Arcangel_Asesino

  • Nuevo Miembro
  • *
  • Mensajes: 7
    • Ver Perfil
Re: Captura Webcam En C#
« Respuesta #20 en: Miércoles 9 de Diciembre de 2009, 08:37 »
0
Cita de: "madeinchiapas"
Cita de: "Arcangel_Asesino"
hola soy nuevo pro este foro peor tengo un problema con la clase que posteaste tengo conectadas 2 cámaras web pero solo me reconoce 1 no sabes por que yo le he buscado la forma pero aun no se por que solo me reconoce de hecho no se si sea por que ambas cámaras usan el "Microsoft WDM Image Capture (Win32)"  :blink: y de hecho con la modificación es el único elemento que parece aunque el sistema si reconoce las 2 cam ya que las puedo activar desde los dispositivos que parecen en la carpeta de " Mi PC" me gustaría saber el por que y como arreglar ese detalle por que no he encontrado como hacerlo ... de todas formas sigo buscando gracias...
  :comp:

Agrego....

ya busque un poco mas y si agrego la constante
Código: Text
  1.  
  2. const int WM_CAP_DLG_VIDEODISPLAY = WM_CAP_START + 42;
  3.  
  4.  
y lo mando como mensaje
Código: Text
  1.  
  2. SendMessage(CamHandle, WM_CAP_DLG_VIDEODISPLAY, 0, 0);
  3.  
  4.  

 la verdad ya tenia tiempo que no venia por aca....

El mio es angel_asesino = de hotmail = y si nos podemos ayudar....

ahora tengo una nueva duda = y ealgo basica pero donde demonios le puedo cambiar la resolución a la captura es muy pekeña y no encuentro como configurar el Microsoft WDM Image Capture (Win32) o donde le muevo para cambiarla en Vista y win 7 que haoratengo que desarrollar para esas plataformas tan hermeticas

aparece una ventana de modificación y puedo cambiar de la cámara de entrada pero aun cuando tenga 2 objetos de la clase la camptura se cambia en objetos y no me permite tener el video de ambas cámaras al mismo tiempo...

Seguiré buscando ... :comp:

si alguien encuentra la disolución se lo agradecería muchísimo...

Hola que tal arcangel oye ando realizando la misma aplicacion y podemos trabajar juntos en base a la informacion que cada uno haya recolectado te parece!  ;)
t dejo mi correo , es en hotmail : made.in.chiapas ... saludos

el mio es angel_asesino = de hot ...

Ya tenia rato que no andaba por aqui pero recien tengo  que ver con esto... otravez

y ahora me enfrento al problema de no poder modificar la resolución de la captura me sale una imagen vastante pekeña supongo que debo configurar el Microsoft WDM Image Capture (Win32) pero no encuntro donde demonios hacerlo ya que adeams ahora lo tengo que desarrollar para windows Vista y  7  :S  <_< alguien por ahi sabe como hacerlo?

tambien si alguien  tiene lana o les financian encontre esta activeX que parece que tiene mucho que ofrecer fathsoft.com/videocapx.html aunque por desgracia se vende y a veces es mejor que uno conosca bie ntodas las tripas de su aplicacion pero si alguien le compran lo apis en la empresa y no tiene tiempo esta es una buena solicion creo,,,

chayma

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
Re: Captura Webcam En C#
« Respuesta #21 en: Martes 8 de Febrero de 2011, 17:32 »
0
Hola, me parece muy interesante el codigo de la captura de la webCam con c#,  
  y me gustaria saber como has inicializado las constantes de la Api de Windows, y donde puedo encontrar un tutorial de las funciones de la Api.
 
       

        muchas Gracias

Jheiron

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
Re:Captura Webcam En C#
« Respuesta #22 en: Miércoles 7 de Septiembre de 2011, 16:52 »
0
hola necesito ayuda..estoy usando esa clase y todo va bien pero el hecho de que no se detenga la cam cuando invico el metodo StopCaptura() me da problemas

estoy haciendo carnets con crystal report..todo bien pero como la cam no se desactiva el formulario del reporte se queda cargando..como se que es por eso..

porque cuando creo el carnet y no activo la cam me sube el reporte de una vez con la imagen de ese estudiantes..y cuando activo la cam se queda cargando y no deja de cargar..si alguien sabe como detener la cam que por favor me diga..Gracias  :/

JaviMarciano

  • Miembro activo
  • **
  • Mensajes: 97
    • Ver Perfil
Re:Captura Webcam En C#
« Respuesta #23 en: Miércoles 28 de Septiembre de 2011, 16:29 »
0
me da error cada vez que hay esto:
&#34

tannke

  • Miembro MUY activo
  • ***
  • Mensajes: 152
  • Nacionalidad: es
    • Ver Perfil
Re:Captura Webcam En C#
« Respuesta #24 en: Viernes 30 de Septiembre de 2011, 09:55 »
0
cambia el " por las " comillas
es algun tipo de error del explorador o ago, dale al siguiente enlace, es el mismo de esta página pero pasado por el traductor de google, y mira en que se transforman esos caracteres ratos:

http://translate.google.es/translate?hl=es&sl=en&tl=es&u=http%3A%2F%2Fsolocodigo.com%2F30381%2Fcaptura-webcam-en-c%2F

saludos
« última modificación: Viernes 30 de Septiembre de 2011, 10:03 por tannke »