Aprende Java Aprende Php Aprende C++ Aprende HTML 5 Aprende JavaScript Aprende JSON Aprende MySQL Aprende SQLServer Aprende Visual Basic 6 Aprende PostgreSQL Aprende SQLite Aprende Redis Aprende Kotlin Aprende XML Aprende Linux VSC Aprende Wordpress Aprende Laravel Aprende VueJS Aprende JQuery Aprende Bootstrap Aprende Netbeans Aprende Android
Sigueme en Facebook Sigueme en Twitter Sigueme en Instagram Sigueme en Youtube Sigueme en TikTok Sigueme en Whatsapp
Home / Java / Java / Java Media Framework / Proyectos / Capturar foto desde una webcam con Java Media Framework

Capturar foto desde una webcam con Java Media Framework

Por jc mouse martes, junio 28, 2011
Como se vio en un post anterior (Capturar video de una webcam con JMF) la captura de un video desde una webcam utilizando la API de Java Media Framework, capturar una imagen, no es cosa del otro mundo, bastara con realizar unas modificaciones a nuestra clase jfmVideo.java

Los requisitos son los mismos, o casi los mismos

Para este ejemplo, se utilizara como dispositivo de captura, «vfw:Microsoft WDM Image Capture (Win32):0» que es el Controlador Universal de Windows para las camaras de video.

Que necesitamos:

  • IDE Netbeans 6.9
  • Libreria JMF (Java Media Framework) instalada y configurada en el sistema
  • Una WebCam, celular con camara tambien sirve
  • Componente jcSlide (Descargar desde aqui) para almacenar las imagenes que capturemos

1. Crea un proyecto en Netbeans y añade las siguientes clases: una clase interfaz video.java y una clas jmfVideo.java

las que estan tachadas son solo imagenes para la interfaz, no son necesarias, no te olvides de añadir la libreria Java Media Framework al proyecto.

2. Para la clase interfaz video.java, se deben añadir los siguientes objetos:

Recuerda crear los objetos con los nombres que estan en la imagen

3. El codigo de la clase jmfVideo.java es:

import java.util.logging.Level;
import java.util.logging.Logger;
import javax.media.*;
import javax.media.cdm.CaptureDeviceManager;
import java.io.*;
import java.awt.*;
import javax.media.control.FrameGrabbingControl;
import javax.media.format.VideoFormat;
import javax.media.util.BufferToImage;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
/**
 * @web http://jc-mouse.blogspot.com/
 * @author Mouse
 */
public class jmfVideo {
//Controlador universal de windows
    private String dispositivo = "vfw:Microsoft WDM Image Capture (Win32):0";
    private Player player = null;

    public Component Componente(){
    Component componente_video;
        try {
            // Se obtiene el dispositivo
            CaptureDeviceInfo device = CaptureDeviceManager.getDevice(dispositivo);
            //se obtiene la fuente de datos de captura
            MediaLocator localizador = device.getLocator();
            //El localizador es del tipo "vfw://0" video para windows
            //se crea el PLAYER y se ejecuta
            player = Manager.createRealizedPlayer(localizador);
            player.start();
        } catch (IOException ex) {
            Logger.getLogger(jmfVideo.class.getName()).log(Level.SEVERE, null, ex);
        } catch (NoPlayerException ex) {
            Logger.getLogger(jmfVideo.class.getName()).log(Level.SEVERE, null, ex);
        } catch (CannotRealizeException ex) {
            Logger.getLogger(jmfVideo.class.getName()).log(Level.SEVERE, null, ex);
        }
        //Si se pudo crear el PLAYER, se obtiene el componente de video
        if ((componente_video = player.getVisualComponent()) != null) {
                //se da un tamaño al componente
                componente_video.setSize(320, 240);
                return componente_video;
            } else {
                JOptionPane.showMessageDialog(null,"No se pudo crear el video...");
                return null;
            }
    }

    //Metodo para capturar la imagen de la webcam
    Image img = null;
    public void capturarImagen(){
        FrameGrabbingControl ControlFG = (FrameGrabbingControl) player.getControl("javax.media.control.FrameGrabbingControl");
        Buffer buffer = ControlFG.grabFrame();
        // creamos la imagen awt
       BufferToImage imagen = new BufferToImage((VideoFormat)buffer.getFormat());
       img = imagen.createImage(buffer);
    }

    public Image getImagen(){
        return img;
    }

    public void setImage(JLabel lb){
        capturarImagen();        
        lb.setIcon( new javax.swing.ImageIcon( img ) );
        System.out.println("ancho= " + img.getWidth(null));
        System.out.println("alto= " + img.getHeight(null));
    }

}
4. Para implementar esta clase en la interfaz, el codigo es el siguiente

Esto se debe colocar en el constructor, no es cuestion de copiar y pegar, analiza el codigo

jmfVideo b = new jmfVideo();
    /** Creates new form video */
    public video() {
        initComponents();
        this.setTitle("Captura de Imagen desde WebCam - by Mouse");
        //formulario al centro de la pantalla
        this.setLocationRelativeTo(null);
        //se coloca un layout tipo CAJA        
        VIDEO.setLayout(new javax.swing.BoxLayout(VIDEO, javax.swing.BoxLayout.LINE_AXIS));
        //se añade el componente de video
        VIDEO.add(b.Componente());
        imagen.setText("");
    }

El codigo para los botones es:

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        b.capturarImagen();
        jcSlide1.setImagen(new ImageIcon(b.getImagen()));        
    }                                        

    private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        if( jcSlide1.getImagen() != null ){
            imagen.setIcon( jcSlide1.getImagen() );
        }else{
        JOptionPane.showMessageDialog(this,"Por favor. Debe seleccionar una imagen...");
        }
    }

Si todo salio bien, solo es cuestion ejecutar el proyecto

Algunas imagenes tomadas con la webcam
un par de chicas que pasaban por ahi
Unas gradas 🙂 si, como dije ese dia hizo frio y no habia mucha gente
Sin comentarios 😉
Un video de como funciona la aplicación, lastimosamente ese dia amanecio nublado  asi que no hubo mucho que filmar 🙂
Lo que todos esperaban, el código fuente
Felices capturas  – FIN

Tags

Artículos similares

native2ascii: Convertir caracteres Non-Unicode a Unicode

El JDK (Java Development Kit) tra una herramienta llamada native2ascii la cual permite convertir un fichero de una codif[...]

Gráfico de columnas con iReport

El gráfico de columnas es uno  tipo de gráfico que nos permite representar fácilmente la cantidad de veces que ocurre un[...]

Descargar video de TikTok sin marca de agua

TikTok es una plataforma de microvideos muy popular entre los jóvenes el cual cuenta ya con millones de videos cortps de[...]

Plantilla android de aviso de página en construcción

Cuando tenemos dominio web pero aun no tenemos el contenido listo es común colocar en su lugar una simple web de aviso q[...]

Quill Editor: Cómo Integrar el WYSIWYG Modular en Vistas Blade

En el desarrollo web la elección de un buen editor de texto enriquecido (WYSIWYG) es una decisión crucial que afecta dir[...]

Crea un TextBox estilo Metro para java

En este tutorial personalizaremos un JTextField java para darle la apariencia de un TextBox de Windows Metro. El TextBox[...]