om.
om.

Reputation: 4239

How to integrate Webcam in Swing application of Java?

I am creating one GUI application in swing Java.I have to integrate web cam with my GUI. Any body have idea about this ?

Upvotes: 8

Views: 11765

Answers (2)

JRL
JRL

Reputation: 77993

  1. Download and install JMF
  2. Add jmf.jar to your project libraries
  3. Download the FrameGrabber source file and add it to your project
  4. Use it as follows to start capturing video.

    new FrameGrabber().start();

To get to the underlying image, you simply call getBufferedImage() on your FrameGrabber reference. You can do this in a Timer task for example, every 33 milliseconds.

Sample code:

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);
  }
}

Upvotes: 8

Denis Tulskiy
Denis Tulskiy

Reputation: 19177

Freedom for Media in Java is an alternative implementation of JMF (API compatible). Just in case you'd like to use OpenSource library.

Upvotes: 2

Related Questions