2013-06-18 60 views
0

我试着在我的摄像头拍摄一张照片,我刚开始使用JMF我只需要用摄像头拍照并将其保存到使用此代码指定目录IM网络摄像头无法找到播放器:vfw:// 0

import java.awt.Component; 
import javax.media.Manager; 
import javax.media.MediaLocator; 
import javax.media.Processor; 
import javax.media.protocol.FileTypeDescriptor; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 

/* 
* To change this template, choose Tools | Templates 
* and open the template in the editor. 
*/ 

/** 
* 
* @author victor 
*/ 
public class WebCam { 
public static void main(String[] args) { 
// TODO Auto-generated method stu 
    otro perro=new otro(); 
    perro.show(); 
    perro.proceso(); 
} 
} 
class otro extends JFrame{ 
JLabel Imagen; 
otro(){ 
    Imagen=new JLabel(); 
    Imagen.setBounds(30,40,20,20); 
    add(Imagen); 
    setBounds(400,400,400,400); 
    setLayout(null); // use a BorderLayou 
    setTitle("Prueba de Camara Web"); 
} 
public void proceso(){ 
     Manager.setHint(Manager.LIGHTWEIGHT_RENDERER, true); 
    try{ 
     MediaLocator ml = new MediaLocator("vfw://0"); 
     Player p = (Player) Manager.createRealizedPlayer(ml); 

     Component video = p.getVisualComponent(); 

     video.setBounds(20,30,600,600); 
     if (video != null){ 
      // agragar el video al componente 
      add(video); 
     } 


     p.start(); 
    }catch(Exception e){ 
     e.printStackTrace(); 
    } 
} 
} 

当我尝试运行我得到这个例外,我是用JMF菜鸟所以请帮助...

javax.media.NoPlayerException: Cannot find a Player for :vfw://0 
at javax.media.Manager.createPlayerForContent(Manager.java:1412) 
at javax.media.Manager.createPlayer(Manager.java:417) 
at javax.media.Manager.createRealizedPlayer(Manager.java:553) 
at otro.proceso(WebCam.java:41) 
at WebCam.main(WebCam.java:24) 

回答

0

与此

package javasewebcam; 

    import java.awt.Graphics2D; 
    import java.awt.Image; 
    import java.awt.image.BufferedImage; 
    import java.io.File; 

    import javax.imageio.ImageIO; 
    import javax.media.Buffer; 
    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; 

    public class CaptureScreenshot 
    { 
    private static Player player = null; 
    private static Image image = null; 

    public static void main(String[] args) 
    { 
     try 
     { 
      MediaLocator ml = new MediaLocator("vfw://0"); 
      player = Manager.createRealizedPlayer(ml); 
      player.start(); 
     } 
     catch (Exception ex) 
     { 
      ex.printStackTrace(); 
      System.exit(0); 
     } 

     while (image == null) 
     { 
      FrameGrabbingControl fgc = (FrameGrabbingControl) player.getControl("javax.media.control.FrameGrabbingControl"); 
      Buffer buf = fgc.grabFrame(); 

      BufferToImage bi = new BufferToImage((VideoFormat) buf.getFormat()); 
      image = bi.createImage(buf); 

         System.out.println("image"+image); 
         if(image!=null) 
         //(toBufferedImage(image)); 
//save image in here 
         image=null; 
         System.out.println("streaming"); 
     } 

     try 
     { 
      ImageIO.write(toBufferedImage(image), "png", new File("screenshot.png")); 
      System.out.println("Image Saved!"); 
     } 
     catch (Exception ex) 
     { 
      ex.printStackTrace(); 
      System.exit(0); 
     } 

     player.close(); 
     player.deallocate(); 
    } 


    public static BufferedImage toBufferedImage(Image i) 
    { 
     BufferedImage bi = new BufferedImage(i.getWidth(null), i.getHeight(null), BufferedImage.TYPE_INT_ARGB); 
     Graphics2D g2d = bi.createGraphics(); 
     g2d.drawImage(i, 0, 0, null); 

     return bi; 
    } 

    } 
尝试