SoloCodigo
		Programación General => Java => Mensaje iniciado por: marina_luciam en Martes 10 de Julio de 2007, 16:46
		
			
			- 
				Amigos del foro: me ha resultado imposible poder guardar la imágen resultante de una captura de video, no se cual puede ser el problema(seguridad, o permisos...o..) les muestro el código fuente a ver si es posible q alguien me de una manito... desde ya muchas gracias.
 
 import java.awt.*;
 import java.awt.event.*;
 import java.applet.Applet;
 import java.applet.*;
 
 import javax.imageio.stream.*;
 
 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.*;
 
 import java.awt.BorderLayout;
 import java.awt.Component;
 import java.awt.Dimension;
 import java.awt.Frame;
 import java.awt.Graphics;
 import java.awt.Graphics2D;
 import java.awt.Image;
 import java.awt.Panel;
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
 import java.awt.event.WindowAdapter;
 import java.awt.event.WindowEvent;
 import java.awt.image.BufferedImage;
 import java.io.FileOutputStream;
 
 import javax.media.Buffer;
 import javax.media.CaptureDeviceInfo;
 //import javax.media.CaptureDeviceManager;
 import javax.media.Manager;
 import javax.media.MediaLocator;
 import javax.media.Player;
 import javax.media.control.FrameGrabbingControl;
 import javax.media.format.VideoFormat;
 import javax.media.util.BufferToImage;
 import javax.swing.JButton;
 import javax.swing.JComponent;
 
 import com.sun.image.codec.jpeg.JPEGCodec;
 import com.sun.image.codec.jpeg.JPEGEncodeParam;
 import com.sun.image.codec.jpeg.JPEGImageEncoder;
 import com.sun.image.codec.jpeg.*;
 
 public class SwingCapture extends Applet implements ActionListener
 {
 public static Player player = null;
 public CaptureDeviceInfo di = null;
 public MediaLocator ml = null;
 public JButton capture = null;
 // public JButton guardar = null;
 public Buffer buf = null;
 public Image img = null;
 public VideoFormat vf = null;
 public BufferToImage btoi = null;
 public ImagePanel imgpanel = null;
 
 public SwingCapture()
 {
 setLayout(new BorderLayout());
 setSize(320,550);
 
 imgpanel = new ImagePanel();
 capture = new JButton("Captura");
 //   guardar = new JButton("Guardar");
 capture.addActionListener(this);
 //   guardar.addActionListener (this);//agregué
 
 String str1 = "vfw:Logitech USB Video Camera:0";
 String str2 = "vfw:Microsoft WDM Image Capture (Win32):0";
 di = CaptureDeviceManager.getDevice(str2);
 ml = new MediaLocator("vfw://0");
 
 try
 {
 player = Manager.createRealizedPlayer(ml);
 player.start();
 Component comp;
 
 if ((comp = player.getVisualComponent()) != null)
 {
 add(comp,BorderLayout.NORTH);
 }
 add(capture,BorderLayout.CENTER);
 //  add (guardar, BorderLayout.WEST);//agregué
 add(imgpanel,BorderLayout.SOUTH);
 }
 catch (Exception e)
 {
 e.printStackTrace();
 }
 }
 
 /*
 public static void main(String[] args)
 {
 Frame f = new Frame("SwingCapture");
 SwingCapture cf = new SwingCapture();
 
 f.addWindowListener(new WindowAdapter() {
 public void windowClosing(WindowEvent e) {
 playerclose();
 System.exit(0);}});
 
 f.add("Center",cf);
 f.pack();
 f.setSize(new Dimension(320,550));
 f.setVisible(true);
 }
 */
 
 public static void playerclose()
 {
 player.close();
 player.deallocate();
 }
 
 
 public void actionPerformed(ActionEvent e)
 {
 JComponent c = (JComponent) e.getSource();
 
 if (c == capture){
 
 // Graba un frame
 FrameGrabbingControl fgc = (FrameGrabbingControl)
 player.getControl("javax.media.control.FrameGrabbingControl");
 buf = fgc.grabFrame();
 
 // Convierte este a una imágen
 
 btoi = new BufferToImage((VideoFormat)buf.getFormat());
 img = btoi.createImage(buf);
 
 // show the image
 imgpanel.setImage(img);
 
 ////////////////////  //guardar imagen
 
 BufferedImage bi = new BufferedImage(img.getWidth(null), img.getHeight(null), BufferedImage.TYPE_INT_RGB);
 Graphics2D g2 = bi.createGraphics(); //contexto gráfico
 g2.drawImage(img, null, null);
 
 g2.dispose();
 
 String filename = "";
 filename = "Pruebafoto.jpg";
 FileOutputStream archivosalida = null;
 
 try
 {
 archivosalida = new FileOutputStream(filename);
 }
 catch (java.io.FileNotFoundException io)
 {
 System.out.println("File Not Found");
 }
 
 JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(archivosalida);
 JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(bi);
 param.setQuality(0.5f,false);
 encoder.setJPEGEncodeParam(param);
 
 try
 {
 encoder.encode(bi);
 archivosalida.flush();
 archivosalida.close();
 }
 catch (java.io.IOException io)
 {
 System.out.println("IOException");
 }
 /////////////////////////////////
 }
 }
 /////////////////
 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);
 }
 }
 }
 
 }