大家好!
我要完成这样一个程序:有一个摄像头,在java的程序的某个面板上显示这个摄像头拍摄的内容。我估计过程是这样的:要调用摄像头的驱动,建立与视频流的连接,然后读取这个流,然后把它以某种方式显示在面板上。不过我没有任何这方面的经验,也不知道该用到哪些类和方法,如何实现,还请高手指点,谢谢!

解决方案 »

  1.   

    以前见过一个相关文章,还没验证,你试试:程序分为两种,有趣的和无趣的,最近做了几个有趣的项目,其中一个,应当就算是摄像头拍照程序了。用于现场拍照,生成照片,主要用到Java Media Framework(JMF)。   首先到SUN下载最新的JMF,然后安装。http://java.sun.com/products/java-media/jmf/index.jsp  然后,说一下需求  1. 用摄像头拍照  2. 在文本框输入文件名  3. 按下拍照按钮,获取摄像头内的图像  4. 在拍下的照片上有一红框截取固定大小的照片。  5. 保存为本地图像为jpg格式,不得压缩画质  技术关键,相信也是大家最感兴趣的部分也就是如何让一个摄像头工作,并拍下一张照片了。  利用JMF,代码很简单://利用这三个类分别获取摄像头驱动,和获取摄像头内的图像流,获取到的图像流是一个Swing的Component组件类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();
    }   接下来就是点击拍照,获取摄像头内的当前图像。  代码也是很简单: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);
    }   保存图像的就不多说了,以下为示例代码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");