You are on page 1of 5

import javax.swing.

*;
import javax.swing.event.*;
import javax.media.*;
import javax.media.control.*;
import javax.media.util.*;
import javax.media.cdm.CaptureDeviceManager;
import javax.media.format.*;
import javax.media.protocol.*;
import java.awt.Image;
import java.util.Vector;
import java.util.Iterator;
import javax.imageio.*;
import java.io.*;
import java.awt.image.RenderedImage;
import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;

public class captura extends JFrame implements ActionListener {

  Player player = null;


  JPanel panelCam,panelBotones,panelIm;
  JButton boton = null;
  JButton botonSalir = null;
  JButton botonGuardar = null;
  ImagePanel panelImagen = null;
  Image img = null;
  String dispositivo = "";

  public void marco() throws Exception{


    boton = new JButton();
    boton.setText("captura");
    boton.setSize(100,40);
    boton.addActionListener(this);
    botonGuardar = new JButton();
    botonGuardar.setText("guardar");
    botonGuardar.setSize(100,40);
    botonGuardar.addActionListener(this);
    botonSalir = new JButton();
    botonSalir.setText("salir");
    botonSalir.setSize(100,40);
    botonSalir.addActionListener(this);
    panelCam = new JPanel();
    panelBotones = new JPanel();
    panelIm = new JPanel();
    panelImagen = new ImagePanel();
    // para saber el dispositivo hacemos CaptureDeviceManager.getDeviceList() y devuelve un
vector
    // con los dispositivos instalados y reconocidos
    CaptureDeviceInfo dev = CaptureDeviceManager.getDevice(dispositivo);
    Format[] cfmts = dev.getFormats();
    RGBFormat fmt = (RGBFormat)cfmts[4];
    //obtengo el locator del dispositivo
    MediaLocator loc = dev.getLocator();
    player = Manager.createRealizedPlayer(loc);
    player.start();
    // esto lo saqué del foro jmf de Sun, hay que "parar un poco la aplicacion"
    Thread.sleep(1000);
    Component comp;

    if ((comp = player.getVisualComponent()) != null)


    {
      // mostramos visualmente el reproductor
      panelCam.add(comp,BorderLayout.CENTER);
      this.getContentPane().add(panelCam,BorderLayout.NORTH);

    }

    panelBotones.add(boton,BorderLayout.EAST);
    panelBotones.add(botonGuardar,BorderLayout.CENTER);
    panelBotones.add(botonSalir,BorderLayout.WEST);
    this.getContentPane().add(panelBotones,BorderLayout.CENTER);
    panelIm.add(panelImagen,BorderLayout.CENTER);
    this.getContentPane().add(panelIm,BorderLayout.SOUTH);
    this.setSize(350,600);
    this.setVisible(true);
 }

public void seleccion() throws Exception{


  ActionListener al = new ActionListener()
 {
    public void actionPerformed(ActionEvent evt){

      dispositivo = evt.getActionCommand();


      System.out.println("Dispositivo seleccionado: "+dispositivo);
    }
  };
  Vector listaDispositivos = null;
  //buscamos los dispositivos instalados
  listaDispositivos = CaptureDeviceManager.getDeviceList();
  JFrame marcoSel = new JFrame();
  JPanel panelRB = new JPanel();
  Iterator it = listaDispositivos.iterator();
  while (it.hasNext()){
    CaptureDeviceInfo cdi = (CaptureDeviceInfo)it.next();
    panelRB.add(new JRadioButton(cdi.getName()));
 }
  ButtonGroup grupo = new ButtonGroup();
  for (int i=0;i<panelRB.getComponentCount();i++){
    grupo.add((JRadioButton)panelRB.getComponent(i));
    JRadioButton boton = (JRadioButton)panelRB.getComponent(i);
    boton.addActionListener(al);
 }

  marcoSel.getContentPane().add(panelRB,BorderLayout.CENTER);
  marcoSel.setSize(300,300);
  marcoSel.setVisible(true);
  while (dispositivo.compareTo("") == 0){
    //espera a que se haga la seleccion
 }
  marcoSel.dispose();

 public void actionPerformed(ActionEvent e) {


   String ac = e.getActionCommand();
   if (ac.equals("captura")){
    // capturamos la imagen
    FrameGrabbingControl fgc = (FrameGrabbingControl)
    player.getControl("javax.media.control.FrameGrabbingControl");
    Buffer buf = fgc.grabFrame();
    // creamos la imagen awt
    BufferToImage btoi = new BufferToImage((VideoFormat)buf.getFormat());
    img = btoi.createImage(buf);
    // la mostramos en nuestro panel
    panelImagen.setImage(img);

   }
   if (ac.equals("guardar")){
     if (img != null){
     JFileChooser chooser = new JFileChooser();
     chooser.setCurrentDirectory(new File("."));
     int result = chooser.showOpenDialog(null);
     Integer i = new Integer(chooser.APPROVE_OPTION);
     if (i != null) {

         File archivo = chooser.getSelectedFile();


         String imagen = archivo.getAbsolutePath();
         System.out.println("imagen: "+imagen);
         if (imagen.lastIndexOf(".") > 0){
         imagen = imagen.substring(0,imagen.lastIndexOf("."));
         }
         imagen = imagen+".JPG";
         System.out.println("imagen:"+imagen);
         File imagenArch = new File(imagen);
         String formato = "JPEG";

         try{
           ImageIO.write((RenderedImage) img,formato,imagenArch);
         }catch (IOException ioe){System.out.println("Error al guardar la imagen");}

     }
     }
     else {
       JFrame alerta = new JFrame();
       alerta.setSize(300,100);
       JPanel panelmsj = new JPanel();
       JLabel msj = new JLabel();
       msj.setText("Antes de guardar debes realizar una captura");
       panelmsj.add(msj);
       alerta.getContentPane().add(panelmsj);
       alerta.setLocationRelativeTo(this);
       alerta.setVisible(true);
       alerta.setEnabled(true);
       alerta.show();

     }
   }
   if (ac.equals("salir")){
     player.close();
     System.exit(0);

   }
 }
  public static void main(String[] args) throws Exception {
    captura cap = new captura();
    cap.seleccion();
    cap.marco();
 }
  class ImagePanel extends Panel
 {
    public Image myimg = null;
    public ImagePanel()
    {
      setLayout(null);
      setSize(320,240);
    }

    public void setImage(Image img)


    {
      this.myimg = img;
      repaint();
    }

    public void paint(Graphics g)


    {
      if (myimg != null)
      {
        g.drawImage(myimg, 0, 0, this);
      }
    }
 }
}

You might also like