Capturar webcam con VB.NET

¿Que haremos? Crearemos una aplicación en Visual Studio, la cual hará uso de una webcam para capturar el video en frames independientes y depositarlos en memoria para despues mostralos al usuario a través de un picturebox y un Timer para crear la ilusión de movimiento. ¿Porque lo haremos? Porque es justo y necesario ¿Que necesitamos? [...]

Envío de correo con JavaMail/Netbeans

JavaMail es una expansión de Java que facilita el envío y recepción de e-mail desde código java. JavaMail implementa el protocolo SMTP (Simple Mail Transfer Protocol) así como los distintos tipos de conexión con servidores de correo -TLS, SSL, autentificación con usuario y password, etc [Según SantaWikipedia] ¿Qué necesitamos? JavaMail 1.4.5 Java y Netbeans 6.9 [...]

Proyecto de base de datos Firebird VB

En este proyecto realizaremos una aplicación de base de datos Firebird con el lenguaje de programación de Visual Basic de Microsoft, este proyecto tendrá las funciones básicas de gestión INSERT, DELETE, UPDATE y una interfaz de usuario para utilizarlas. ¿Que necesitamos? Visual Studio 2008 o superior Firebird última versión Firebird ADO.NET Data Provider. Conocimientos básicos [...]

Imprimir imagen con Print

La siguiente clase hace uso de PRINT para imprimir una imagen que se encuentra en un variable de tipo FileInputStream, esta clase a su vez es implementada desde una interfaz que hace fácil su uso, la clase así como todo el proyecto esta comentado. import java.io.File; import javax.print.Doc; import java.io.IOException; import javax.print.DocFlavor; import javax.print.SimpleDoc; import java.io.FileInputStream; [...]

Code Army Bolivia
Mostrando entradas con la etiqueta Netbeans. Mostrar todas las entradas
Mostrando entradas con la etiqueta Netbeans. Mostrar todas las entradas

29/9/13

Multiplicación de matrices con applet

JAN29

Un aporte de un amigo guatemalteco Luis CMurga, nos deja a disposición un proyecto java/netbeans para multiplicar matrices gráficamente utilizando la tecnología de los applets.

Originalmente desarrollado con java 7, funciona perfectamente en java 6 con minúsculas modificaciones, ademas hace uso de la librería AbsoluteLayout, cuenta con dos clases cada una con una manera diferente de introducir los datos.




Dar las gracias por el aporte a:
Autor: Luis CMurga
Facebook: https://www.facebook.com/luis.cmurga

Descargar proyecto AQUI

continue reading

28/5/12

Crea tu lector Feed con Java

JAN29


En este tutorial se crea paso a paso un lector Feed utilizando el lenguaje Java y el IDE Netbeans, ademas se hace uso de la librería rome-1.0 y JDom, el lector es sencillo pero cuenta con una interfaz gráfica lo que hace de este proyecto bastante entretenido. Ve el video y enterate un poco más de lo que haremos en este tutorial.


"Una fuente web o canal web (en inglés web feed) es un medio de redifusión de contenido web. Se utiliza para suministrar información actualizada frecuentemente a sus suscriptores. En su jerga, cuando una página web "redifunde" su contenido mediante una fuente web, los internautas pueden "suscribirse" a ella para estar informados de sus novedades. Los interesados pueden usar un programa "agregador" para acceder a sus fuentes suscritas desde un mismo lugar.


Son muy utilizados en los blogs o bitácoras de Internet, así como en prensa electrónica. Cada día hay más medios que utilizan este sistema de redifusión web. La gran difusión de este tipo de servicio web ha estimulado el interés en otros sectores que comienzan a ver en las fuentes web una forma efectiva de difundir y compartir información empresarial."

Ver tutorial

continue reading

12/5/12

Cargar datos a un JTree desde una base de datos

JAN29

Problema: Se necesita cargar los datos de una base de datos hacia un JTree, la base de datos es de un país que tiene departamentos y los departamentos tienen provincias y las provincias, municipios, al hacer clic en un nodo, debe desplegar sus nodos hijos. Al realizar clic en un nodo, se debe desarrollar una acción.

Base de datos:
-- 
-- Base de datos: 'dbbolivia'
-- 
-- 
-- Estructura de tabla para la tabla 'departamento'
-- 
CREATE TABLE departamento (
  dep_id int(2) NOT NULL,
  dep_nombre varchar(32) NOT NULL,
  PRIMARY KEY  (dep_id)
);
-- 
-- Estructura de tabla para la tabla 'provincia'
-- 
CREATE TABLE provincia (
  prov_id int(2) NOT NULL auto_increment,
  prov_nombre varchar(32) NOT NULL,
  dep_id varchar(32) NOT NULL,
  PRIMARY KEY  (prov_id)
);
-- 
-- Estructura de tabla para la tabla 'municipio'
-- 
CREATE TABLE municipio (
  mun_id int(2) NOT NULL auto_increment,
  mun_nombre varchar(32) NOT NULL,
  prov_id int(2) NOT NULL,
  PRIMARY KEY  (mun_id)
);
Solución.
¿Qué necesitamos?

  • Netbeans
  • Servidor MySQL

Crear la base de datos y agregar algunos datos

1. Crear una proyecto netbeans, agregar un JFrame (interfaz.java) y agregar los siguientes controles:
2. Agregar también una clase (nombre:database.java) para inter actuar con la base de datos MySQL. el código de la clase es:
import java.sql.*;
/**
 * @web http://www.jc-mouse.net
 * @author Mouse
 */
public class database {
  /* DATOS PARA LA CONEXION */
  private String bd = "dbbolivia";
  private String login = "";//USUARIO
  private String password = "";//CONTRASEÑA
  private String url = "jdbc:mysql://localhost/"+bd;
  private Connection conn = null;
//___________________________________________________________________________________ Soy una barra separadora :)
   public database(){
      try{
         //obtenemos el driver de para mysql
         Class.forName("com.mysql.jdbc.Driver");
         //obtenemos la conexión
         conn = DriverManager.getConnection(url,login,password);
         if (conn!=null){
            System.out.println("OK base de datos "+bd+" listo");
         }
      }catch(SQLException e){
         System.out.println(e);
      }catch(ClassNotFoundException e){
         System.out.println(e);
      }
    }
//___________________________________________________________________________________ Soy una barra separadora :)
    public Connection getConnection()
    {
        return this.conn;
    }
//___________________________________________________________________________________ Soy una barra separadora :)
/* METODO PARA REALIZAR UNA CONSULTA A LA BASE DE DATOS
 * INPUT:
 *      table => nombre de la tabla donde se realizara la consulta, puede utilizarse tambien INNER JOIN
 *      fields => String con los nombres de los campos a devolver Ej.: campo1,campo2campo_n
 *      where => condicion para la consulta
 * OUTPUT: un object[][] con los datos resultantes, sino retorna NULL
 */
    public Object [][] select(String table, String fields, String where){
      int registros = 0;
      String colname[] = fields.split(",");

      //Consultas SQL
      String q ="SELECT " + fields + " FROM " + table;
      String q2 = "SELECT count(*) as total FROM " + table;
      if(where!=null)
      {
          q+= " WHERE " + where;
          q2+= " WHERE " + where;
      }
      //obtenemos la cantidad de registros existentes en la tabla
      try{
         PreparedStatement pstm = conn.prepareStatement(q2);
         ResultSet res = pstm.executeQuery();
         res.next();
         registros = res.getInt("total");
         res.close();
      }catch(SQLException e){
         System.out.println(e);
      }
    //se crea una matriz con tantas filas y columnas que necesite
    Object[][] data = new String[registros][fields.split(",").length];
    //realizamos la consulta sql y llenamos los datos en la matriz "Object"
      try{
         PreparedStatement pstm = conn.prepareStatement(q);
         ResultSet res = pstm.executeQuery();
         int i = 0;
         while(res.next()){
            for(int j=0; j<=fields.split(",").length-1;j++){
                data[i][j] = res.getString( colname[j].trim() );
            }
            i++;         }
         res.close();
          }catch(SQLException e){
         System.out.println(e);
    }
    return data;
 }
//___________________________________________________________________________________ Soy una barra separadora :)
}
Esta clase se conecta a la base de datos, también cuenta con una clase para realizar una consulta
3. Clase interfaz.java
- Las librerias que se utilizan son:
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.TreePath;
- Crear una instancia a la clase database.java:
private database db = new database();
- Implementar la clase database, así como el código para llenar el JTree en el constructor de la clase interfaz.java:

public interfaz() {
        initComponents();
        this.setTitle("JTree - http://www.jc-mouse.net/");

     //se crea la raiz
     DefaultMutableTreeNode pais = new DefaultMutableTreeNode("Bolivia");
     DefaultMutableTreeNode departamento;
     DefaultMutableTreeNode provincia;
     DefaultMutableTreeNode municipio;     

     //se obtienen los departamentos
     Object[][] data_dep =  db.select("departamento", " dep_id, dep_nombre", null);
     if( data_dep.length > 0)
     {
        for(int i=0; i < data_dep.length; i++)
        {
            //se crea hojas departamentos
            departamento = new DefaultMutableTreeNode(data_dep[i][1]);
            pais.add(departamento);
            //se obtiene las provincias
            Object[][] data_prov =  db.select("provincia", "prov_id,prov_nombre" , " dep_id='" + data_dep[i][0].toString()+"' ");
            if( data_prov.length > 0)
            {
                for(int j=0; j< data_prov.length; j++)
                {
                    provincia = new DefaultMutableTreeNode(data_prov[j][1]);
                    departamento.add(provincia);
                    //se obtienen los municipios
                    Object[][] data_mun =  db.select("municipio", "mun_id,mun_nombre" , " prov_id='" + data_dep[j][0].toString()+"' ");
                    if( data_mun.length > 0)
                    {
                        for(int k=0; k< data_mun.length; k++)
                        {
                            municipio = new DefaultMutableTreeNode(data_mun[k][1]);
                            provincia.add(municipio);
                        }
                    }
                }
            }
        }
     }

    
    DefaultTreeModel modelo = new DefaultTreeModel(pais);
    this.jTree1.setModel(modelo);

    jTree1.getSelectionModel().addTreeSelectionListener(new TreeSelectionListener() {

        public void valueChanged(TreeSelectionEvent e) {
            // Se obtiene el Path seleccionado
            TreePath path = e.getPath();
     Object [] nodos = path.getPath();
            String txt= jTextArea1.getText() + "Path seleccionado: ";
            for (Object nodo: nodos)
                txt+=nodo.toString() + " | ";                
            txt+="\n";            
     // Se obtiene el Nodo seleccionado
            DefaultMutableTreeNode NodoSeleccionado = (DefaultMutableTreeNode)nodos[nodos.length-1];            
            txt+="-> Accion para Nodo Seleccionado [" + NodoSeleccionado.getUserObject().toString() + "]";
            txt+="\n";
     jTextArea1.setText(txt);
  }            
    });

    }

- Explicación: Se crea la raíz país (Bolivia), después se extrae los registros de la tabla departamentos y se añade a la raíz país, se extrae los registros provincias y se añade a su raíz departamento, se repite el proceso para municipios.

- Ejecutar

Descargar proyecto HERE

continue reading

4/3/12

Procedimientos almacenados java, mysql, netbeans

JAN29


Si quieres aprender un poco sobre lo que son los procedimientos almacenados en MySQL, como crearlos, como ejecutarlos y como eliminarlos, todo esto trabajando desde consola y con comandos SQL, puedes ver el siguiente video tutorial.


Si lo prefieres y necesitas un poco más de información, puedes ver el post completo en:


Ademas, si quieres utilizar procedimientos almacenados de MySQL desde java, necesitas leer este tutorial:


Espero les sirva :)

continue reading

12/2/12

Tips: Plegado de código en Netbeans

JAN29

El editor de código de  Netbeans nos ayuda de muchas maneras a la hora de escribir el código, habria que ser un experto en conocerlos todos, pues bien, yo me encontre con un tips para "plegar código" que honestamente no sabia que existia :), pero es un buen truco, sencillo y facil de utilizar, aqui les va:

Si tenemos extensas lineas de código que deseamos agrupar para tener nuestro trabajo mucho más ordenado, como las lineas de abajo.
Debemos utilizar la siguiente sentencia entre las lineas de código que nos interesa


// <editor-fold>
   El codigo va aqui
// </editor-fold>

O tambien si queremos colocar una descripción al plegado:

// <editor-fold desc="Este codigo es importantisimo">
codigo aqui
// </editor-fold>
Y tenemos como resultado:
Se puede ver como se añaden una lineas entre esas sentencias y un signo de "menos", pues es con eso que podemos plegar nuestro código.

Imaginate tener 1000 lineas de código en una clase, todo un lio, pero si lo agrupamos y plegamos con EDITOR-FOLD el código nos que da mas entendible y estetico no les parece.


Y para aquellos que si lo conocian y diran "wtf!", "que m... es esto", "más visto que la c... de tu hermana",pues bueno, yo no lo conocia, pero ahora si :)

continue reading

30/1/12

j2Button componente swing para java

JAN29


j2Button componente swing para java que te permite colocar texto en dos lineas separadas cada una con su propio color de texto, tamaño y tipo de fuente.

No hay mucho que decir sobre este componente, es sencillo de usar y hace uso de una de las propiedadades de JButton el cual acepta codigo HTML y CSS del tipo:

<html> 
<style type="text/css"> 
.estilo1{font-family:Bradley Hand ITC;font-weight:bold; font-size:24px;color:rgb(51, 51, 51);} 
.estilo2{font-family:Rod;font-weight:bold; font-size:12px;color:rgb(102, 102, 102);} 
</style> 
<span class="estilo1">Boton Fachero</span><br/> 
<span class="estilo2">Problem?</span> 
</html> 

Este código se coloca en el TEXT del Jbutton, pero claro, el objetivo de este componente "j2Button", es ahorrarte el trabajo de escribir ese pedazo de código y hacerlo todo de una forma manual y sencilla desde el editor grafico de Netbeans.

Pues nada, eso es todo si quieres probar el componente puedes bajartelo desde el siguiente enlace con manual incluido:
http://link.jc-mouse.net/?id=J2BTNCSSOK

Si te sirve con un gracias me conformo :)

continue reading

26/12/11

Patrón MVC en Java con Netbeans

JAN29

El patrón MVC (Modelo, Vista, Controlador), es un patrón de arquitectura de software que separa los datos de una aplicación, la interfaz que ve el usuario de la logica del negocio en tres componentes distintos. Es más frecuente en aplicaciones Web que en aplicaciones de escritorio, sin embargo es aplicable tambien a este, sin ningun problema, Java ya contaba hace rato con Observer y Observable, herramientas que nos ayudan a la interacción entre la interfaz y el modelo, sin embargo, el ejemplo que dejamos a continuación no hace uso de estas herramientas.

La descripción del patrón MVC es:

  • Vista (View): Representa la interfaz de usuario y todas las herramientas con las cuales el usario hace uso del programa.
  • Modelo (Model): Es donde esta toda la lógica del negocio, la representación de todo el sistema incluido la interacción con una base de datos, si es que el programa asi lo requiere.
  • Controlador (Controller): Este componente es el que responde a la interacción (eventos) que hace el usuario en la interfaz y realiza las peticiones al modelo para pasar estos a la vista.
Aún no esta del todo claro, pero con el siguiente ejemplo, lo comprenderemos mejor.
El programa que realizaremos, es una aplicación trivial y sencilla, sin embargo nos ayudara a comprender mejor cual la forma de trabajo de este matrón MVC en Java, utilizaremos para esto, el IDE de Netbeans.

PROYECTO
1. Crea un nuevo proyecto en netbeans, para este ejemplo, el proyecto se llama "jc_mvc_demo". Crea una estructura de paquetes (Controller, Model, View), hacemos esto para separar cada componente, ser más organizados. Debes tener algo como esto.
Como puedes observar, mantenemos el paquete default junto al Main.java que nos crea netbeans, este main es el que nos servira como nuestro index.php de nuestra aplicación, nuestro "lanzador".

2. Empecemos creando la lógica de la aplicación, crea una nueva clase en el paquete Model, llamalo "modelo.java" y añade el siguiente codigo:


01 package model;
02 /**
03  * @web http://jc-mouse.blogspot.com/
04  * @author Mouse
05  * En esta clase se guarda la lógica del sistema, para este sencillo ejemplo
06  * consiste en una SUMA
07  */
08 public class modelo {
09     //Variables
10     private int valor1=28;
11     private int valor2=69;
12     private int total = sumar();
13 
14     public modelo(){}
15 
16     public void set_valor1(int val){
17         this.valor1=val;
18     }
19 
20     public int get_valor1(){
21         return this.valor1;
22     }
23 
24     public void set_valor2(int val){
25         this.valor2=val;
26     }
27 
28     public int get_valor2(){
29         return this.valor2;
30     }
31 
32     public int sumar(){
33         this.total =  this.valor1 + this.valor2;
34         return this.total;
35     }
36 
37     public int get_total(){
38         return this.total;
39     }
40 
41 }

Como vemos, nuestra modelo es sencillo, es nada más que la suma de dos valores enteros, con sus respectivos metodos. continuemos.

3. Diseñemos ahora la interfaz de usuario, nuestra VISTA.
Añade un JFrame al paquete VIEW, llamalo "vista.java", OJO los recuadros marcados con rojo, son los componentes que tendran interacción con el modelo, asi que para evitar confuciones, es mejor renombrarlos, coloca los nombres tal como se ven en la imagen de abajo.
Netbeans, al añadir objetos a nuestro JFrame, automaticamente los coloca como PRIVATE, debemos cambiar esto, para ello selecciona el objeto "vtxt1" y ve asus propiedades, en la pestala CODIGO, elige el campo MODIFICADORES DE VARIABLE, en la ventana que sale, cambia el atributo PRIVATE, por PUBLIC y dale a aceptar. Repite esta acción para todos los objetos que estan marcados con rojo en la imagen anterior.

3. Ahora continuamos con el CONTROLADOR de nuestra aplicación, crea una clase "controlador.java" en el paquete CONTROLLER, el codigo que debes colocar, es:


01 package controller;
02 
03 import java.awt.event.ActionEvent;
04 import java.awt.event.ActionListener;
05 import model.modelo;
06 import view.vista;
07 /**
08  * @web http://jc-mouse.blogspot.com/
09  * @author Mouse
10  */
11 public class controlador implements ActionListener{
12 
13     private vista vista;
14     private modelo modelo;
15 
16     //En el constructor inicializamos nuestros objetos y tambien
17     //añadimos el ActionListener al boton "cmdsumar" de la VISTA
18     public controlador( vista vista , modelo modelo){
19         this.vista = vista;
20         this.modelo = modelo;
21         this.vista.cmdsumar.addActionListener(this);
22     }
23 
24     //Inicia los valores del jFrame VISTA con los datos del MODELO
25     public void iniciar_vista(){
26         vista.setTitle( "Demo MVC * jc-mouse.net" );
27         vista.setLocationRelativeTo(null);
28         vista.vtxt1.setText( String.valueOf(modelo.get_valor1()) );
29         vista.vtxt2.setText( String.valueOf(modelo.get_valor2()) );
30         vista.vtxt3.setText( String.valueOf(modelo.get_total()) );
31     }
32 
33     //La accion del boton de la VISTA es capturado, asi como los valores de
34     //los jtextbox, entonces se realiza la funcion SUMAR y se actualiza
35     //el jtextbox correspondiente al resultado
36     public void actionPerformed(ActionEvent e) {
37         modelo.set_valor1( Integer.valueOf( vista.vtxt1.getText() ) );
38         modelo.set_valor2( Integer.valueOf( vista.vtxt2.getText() ) );
39         modelo.sumar();
40         vista.vtxt3.setText( String.valueOf(modelo.get_total()) );
41     }
42 
43 }

Explicación: nuestra clase controlador, implementa el ActionListener, esto para responder desde esta clase, los eventos realizados desde la interfaz (VISTA), ademas en el constructor de la clase, vemos que se pasan como parametros, la clase VISTA y la clase MODELO,nuestra clase ademas cuenta las funciones, INICIAR() la cual inicializa los valores de la interfaz, como ser el atributo titulo del JFrame, posicionamiento en pantalla, valores iniciales de los jtextbox, etc. tambien tenemos el método actión performed el cual capura el evento realizado desde la interfaz, en nuestro ejemplo es solo un CLICK EN EL BOTON DE MENU CMDSUMAR, obtiene los datos correspondientes e invoca al modelo para procesar la información y obtener una respuesta. Pues bueno, eso es todo, fijese como la interfaz para llegar al modelo, pasa por el controlador y visceversa, cuando el modelo necesita mostrar un dato, pasa por el controlador hasta llegar a la vista, esto claro no es una regla, puedes buscar en google y encontraras varias variaciones de este modelo.

4. Para terminar debemos implementar todo esto en nuestro main.java:


01 package jc_mvc_demo;
02 
03 import controller.controlador;
04 import model.modelo;
05 import view.vista;
06 /**
07 *  @web http://jc-mouse.blogspot.com/
08  * @author Mouse
09  */
10 public class Main {
11     
12     public static void main(String[] args) {
13 
14         //nuevas instancias de clase
15         modelo modelo = new modelo();
16         vista vista = new vista();        
17         controlador controlador = new controlador( vista , modelo );
18         //se inicia la vista
19         controlador.iniciar_vista();
20 
21         vista.setVisible(true);
22 
23     }
24 
25 }

Ejecuta el programa para terminar.
El patrón MVC, nos permite cambiar la interfaz de usuario (VISTA), sin tocar en lo absoluto el MODELO de la aplicación, y realizar pequeños cambios en el controlador, minimos cambios, como podemos observar en la imagen superior, tenemos la interfaz 1, la cual creamos en este tutorial, y ademas una segunda interfaz, totalmente distina, sin embargo funciona bajo el mismo MODELO.

Descarga  el ejemplo e investiga como cambiar la interfaz1 a la interfaz2

El proyecto completo, esta "AQUI"


Suerte :)

continue reading

8/5/11

Reportes con Imagenes [Videotutorial]

JAN29

Video Tutorial que muestra una de las maneras de utilizar y mostrar imagenes en iReport, pasando estas como parametros desde Java, se utiliza el IDE Netbeans 6.9 y JasperReport v3.7.2

El video lo explica todo, y para un usuario intermedio de java/netbeans/iReport es bastante obvio, sin embargo, dejo tambien el codigo fuente

[Enlace Actualizado]
Click para descargar

continue reading

31/3/11

Capturar Imagen de una webcam con JMF

JAN29

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

Click para descargar 
Enlace actualizado abril-2012


Felices capturas  - FIN

continue reading

Post recomendado