2012-05-11 7 views
2

Язык: Java
Он используется в дополнение: JMFСохранение изображений с веб-камеры

Ниже приведен код (без поворотно-форм), что позволяет захватывать изображение с веб-камеры:

MediaLocator getWebCam = new MediaLocator("vfw://0"); 
    private Player player; 
    Timer timer = new Timer(40, this); 

    public BufferedImage grabFrameImage() { 

     Image image = null; 
     FrameGrabbingControl frameGrabbingControl = null; 

     if (player != null) 
      frameGrabbingControl = (FrameGrabbingControl) player.getControl("javax.media.control.FrameGrabbingControl"); 
     Buffer buffer = frameGrabbingControl.grabFrame(); 
     if (buffer != null) 
      image = new BufferToImage((VideoFormat) buffer.getFormat()).createImage(buffer); 
     if (image != null) 
      return (BufferedImage) image; 

     return null; 
    } 

    public WorkWithWebCam() throws NoDataSourceException, IOException, NoPlayerException { 

      initComponents(); 
      player = Manager.createPlayer(Manager.createDataSource(getWebCam)); 
      player.start(); 

    } 
private void jButton1ActionPerformed(ActionEvent e) { 
     timer.start(); 
    } 

    public static void main(String args[]) { 
     EventQueue.invokeLater(new Runnable() { 
      public void run() { 
       try{ 
        new WorkWithWebCam().setVisible(true); 
       }catch(Exception ex){} 
      } 
     }); 
    } 

    public void actionPerformed(ActionEvent e) { 
     panelMain.getGraphics().drawImage(this.grabFrameImage(), 0, 0, 400, 300, null); 
    } 

Не могли бы вы рассказать, как сохранить изображение с помощью веб-камеры?

Забегая вперед, мы расширили метод actionPerformed:

public void actionPerformed(ActionEvent e) { 
     panelMain.getGraphics().drawImage(this.grabFrameImage(), 0, 0, 400, 300, null); 
     BufferedImage image = new BufferedImage(400, 300, BufferedImage.TYPE_INT_RGB); 
     String fileOut = "temp.jpg"; 
     Graphics g = image.getGraphics(); 
     panelMain.paint(g); 
     try { 
      ImageIO.write(image, "jpg", new FileOutputStream(fileOut)); 
     } catch (IOException e1) { 
      e1.printStackTrace(); //To change body of catch statement use File | Settings | File Templates. 
     } 

    } 

Единственное, изображение не будет сохранено с помощью веб-камеры, а белый фон с вертикальной полосой справа.

ответ

2
image = new BufferToImage((VideoFormat) buffer.getFormat()).createImage(buffer); 
ImageIO.write(image, "png", new File("screengrab.png")); 

Для получения более подробной информации см. ImageIO.write(RenderedImage,String,File).

+0

Работы) Спасибо) – TorchTT

 Смежные вопросы

  • Нет связанных вопросов^_^