我正在使用swing Java创建一个GUI应用程序。我必须将网络摄像头与GUI集成在一起。有人对此有想法吗?

最佳答案

  • 下载并安装JMF
  • 将jmf.jar添加到您的项目库
  • 下载FrameGrabber源文件并将其添加到您的项目
  • 使用它开始捕获视频。

    新的FrameGrabber()。start();

  • 要获得基础图像,只需在FrameGrabber引用上调用getBufferedImage()即可。例如,您可以每33毫秒在Timer任务中执行此操作。

    样例代码:
    public class TestWebcam extends JFrame {
      private FrameGrabber vision;
      private BufferedImage image;
      private VideoPanel videoPanel = new VideoPanel();
      private JButton jbtCapture = new JButton("Show Video");
      private Timer timer = new Timer();
    
      public TestWebcam() {
        JPanel jpButton = new JPanel();
        jpButton.setLayout(new FlowLayout());
        jpButton.add(jbtCapture);
    
        setLayout(new BorderLayout());
        add(videoPanel, BorderLayout.CENTER);
        add(jpButton, BorderLayout.SOUTH);
        setVisible(true);
    
        jbtCapture.addActionListener(
           new ActionListener() {
              public void actionPerformed(ActionEvent e) {
                   timer.schedule(new ImageTimerTask(), 1000, 33);
              }
           }
       );
      }
    
      class ImageTimerTask extends TimerTask {
         public void run() {
             videoPanel.showImage();
         }
      }
    
      class VideoPanel extends JPanel {
          public VideoPanel() {
            try {
                vision = new FrameGrabber();
                vision.start();
            } catch (FrameGrabberException fge) {
            }
          }
    
          protected void paintComponent(Graphics g) {
            super.paintComponent(g);
            if (image != null)
               g.drawImage(image, 10, 10, 160, 120, null);
          }
    
          public void showImage() {
              image = vision.getBufferedImage();
              repaint();
          }
      }
    
      public static void main(String[] args) {
            TestWebcam frame = new TestWebcam();
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.setSize(190, 210);
            frame.setVisible(true);
      }
    }
    

    09-19 07:31