写公司的应用无聊了,自己弄点好玩的不知道有没有可以操控摄像头的类?

解决方案 »

  1.   

    反正标准api中是不可能有的.至于有没有什么第三方的东东就不知道了.
    估计得你自己用jni来实现.
      

  2.   

    你可以使用JMF来进行视频开发.
    首先到SUN下载最新的JMF,然后安装。http://java.sun.com/products/java-media/jmf/index.jsp
    如下是利用JMF,操纵摄像头的程序:
    1.获取摄像头驱动,和获取摄像头内的图像流
    public static Player player = null;
    private CaptureDeviceInfo di = null;
    private MediaLocator ml = null;
    String str1 = "vfw:Logitech USB Video Camera:0";
    String str2 = "vfw:Microsoft WDM Image Capture (Win32):0"; 
    di = CaptureDeviceManager.getDevice(str2);
    ml = di.getLocator();
    try
    {
     player = Manager.createRealizedPlayer(ml);
     player.start();
     Component comp;
     if ((comp = player.getVisualComponent()) != null)
     {
      add(comp, BorderLayout.NORTH);
     }
    }
    catch (Exception e)
    {
     e.printStackTrace();
    }
    2.拍照,获取图像
    private JButton capture;
    private Buffer buf = null;
    private BufferToImage btoi = null;
    private ImagePanel imgpanel = null;
    private Image img = null;
    private ImagePanel imgpanel = null;JComponent c = (JComponent) e.getSource();
    if (c == capture)//如果按下的是拍照按钮 

     FrameGrabbingControl fgc =(FrameGrabbingControl)  player.getControl("javax.media.control.FrameGrabbingControl");
     buf = fgc.grabFrame(); // 获取当前祯并存入Buffer类
     btoi = new BufferToImage((VideoFormat) buf.getFormat());
     img = btoi.createImage(buf); // show the image 
     imgpanel.setImage(img);
    }
    3.保存图像
    BufferedImage bi = (BufferedImage) createImage(imgWidth, imgHeight);
    Graphics2D g2 = bi.createGraphics();
    g2.drawImage(img, null, null);
    FileOutputStream out = null;
    try
    {
     out = new FileOutputStream(s);
    }
    catch (java.io.FileNotFoundException io)
    {
     System.out.println("File Not Found");
    }JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
    JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(bi);
    param.setQuality(1f, false);//不压缩图像
    encoder.setJPEGEncodeParam(param);
    try
    {
     encoder.encode(bi);
     out.close();
    }
    catch (java.io.IOException io)
    {
     System.out.println("IOException");
    }