Java com Webcam

Alguem teria um código funcional que capture imagens com web cam para linux ou windows.

Obrigado

http://www.humatic.de/htools/dsj.htm

porra, kadisk, assim vc arrebenta com o forum, cara… chegar e pedir um código pronto? putz, google ta aí pra isso cara, pesquise, implemente ou tente adaptar um código pronto
às suas necessidades e então venha aqui pedir uma AJUDA em algum ponto do SEU código. com essa atitude de pedir algo pronto e “mastigado” vc n chega em nenhum lugar.

abs.

[quote=gambazinho]porra, kadisk, assim vc arrebenta com o forum, cara… chegar e pedir um código pronto? putz, google ta aí pra isso cara, pesquise, implemente ou tente adaptar um código pronto
às suas necessidades e então venha aqui pedir uma AJUDA em algum ponto do SEU código. com essa atitude de pedir algo pronto e “mastigado” vc n chega em nenhum lugar.

abs.[/quote]
Concordo plenamente, mas tem casos que a coisas que a pessoa não sabe nem por onde começar a pesquisar e fica dificil começar a fazer algum codigo. :shock: :idea: :idea: :wink: .
eu tambem ja me aconteceu algo parecido, nem saber por onde começar a pesquisar

eu até tente mais da esse erro

Exception in thread “VFW Request Thread” java.lang.UnsatisfiedLinkError: JMFSecurityManager: java.lang.UnsatisfiedLinkError: no jmvfw in java.library.path
at com.sun.media.JMFSecurityManager.loadLibrary(JMFSecurityManager.java:206)
at com.sun.media.protocol.vfw.VFWCapture.(VFWCapture.java:19)
at com.sun.media.protocol.vfw.VFWSourceStream.doConnect(VFWSourceStream.java:241)
at com.sun.media.protocol.vfw.VFWSourceStream.run(VFWSourceStream.java:763)
at java.lang.Thread.run(Thread.java:619)

poste o seu código para podermos lhe ajudar melhor.

package webcam;

import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.File;
import java.io.IOException;
import java.util.Arrays;
import java.util.Vector;
import javax.media.CannotRealizeException;
import javax.media.CaptureDeviceInfo;
import javax.media.CaptureDeviceManager;
import javax.media.DataSink;
import javax.media.Format;
import javax.media.Manager;
import javax.media.MediaLocator;
import javax.media.NoDataSinkException;
import javax.media.NoDataSourceException;
import javax.media.NoProcessorException;
import javax.media.Processor;
import javax.media.ProcessorModel;
import javax.media.control.FormatControl;
import javax.media.control.MonitorControl;
import javax.media.datasink.DataSinkEvent;
import javax.media.datasink.DataSinkListener;
import javax.media.datasink.EndOfStreamEvent;
import javax.media.protocol.CaptureDevice;
import javax.media.protocol.DataSource;
import javax.media.protocol.FileTypeDescriptor;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;


public class CapturaImagens extends JFrame {

   private JButton captureButton;
   private Component progressoGravacao;
   private Format formats[], formatoSelecionado;
   private FormatControl controlesFormato[];
   private CaptureDeviceInfo informacoesDispositivo;
   private Vector dispositivosLista;
   private DataSource inSource, saida;
   private DataSink dataSink;
   private Processor processor;

   public CapturaImagens() {
      super( "Captura..." );
      JPanel buttonPanel = new JPanel();
      getContentPane().add( buttonPanel );
      captureButton = new JButton( "Capturar e Salvar" );
      buttonPanel.add( captureButton, BorderLayout.CENTER );
      captureButton.addActionListener( (ActionListener) new CaptureHandler());
      Manager.setHint( Manager.LIGHTWEIGHT_RENDERER, Boolean.TRUE );
      addWindowListener(
         new WindowAdapter() {
            @Override
            public void windowClosing( WindowEvent windowEvent ) {
               if ( processor != null )
                  processor.close();
            }
         }
      );
   }

   private class CaptureHandler implements ActionListener {
      public void actionPerformed( ActionEvent actionEvent ) {
         dispositivosLista = CaptureDeviceManager.getDeviceList( null );
         if ((dispositivosLista == null) || (dispositivosLista.size() == 0)) {
            informarErro( "Nenhum dispositivo de captura encontrado!" );
            return;
         }

         // lista todos os dispositivos encontrados
         String nomesDispositivos[] = new String[dispositivosLista.size()];
         for ( int i = 0; i < dispositivosLista.size(); i++){
            informacoesDispositivo = (CaptureDeviceInfo)dispositivosLista.elementAt(i);
            nomesDispositivos[i] = informacoesDispositivo.getName();
         }
         int indiceDispositivoSelecionado = capturarIndiceDispositivoSelecionado(nomesDispositivos);

         if (indiceDispositivoSelecionado == -1)
            return;

         // pega informações do dispositivo selecionado
         informacoesDispositivo = (CaptureDeviceInfo)dispositivosLista.elementAt(indiceDispositivoSelecionado);
         formats = informacoesDispositivo.getFormats();

         if (inSource != null)
            inSource.disconnect();

         try {
            inSource = Manager.createDataSource(informacoesDispositivo.getLocator());
            controlesFormato = ((CaptureDevice)inSource).getFormatControls();
            formatoSelecionado = capturarFormatoSelecionado(formats);
            if (formatoSelecionado == null)
               return;
            mostrarFormatoDispositivo(formatoSelecionado);
            captureSaveFile();
         }
         catch (NoDataSourceException noData) {
            noData.printStackTrace();
         }
         catch (IOException io) {
            io.printStackTrace();
         }
      }
   }

   public void mostrarFormatoDispositivo(Format formatoAtual) {
      for (int i = 0; i < controlesFormato.length; i++) {
         if (controlesFormato[i].isEnabled() ) {
            controlesFormato[i].setFormat(formatoAtual);
            System.out.println ("Formato atualmente como "+controlesFormato[i].getFormat() );
         }
      }
   }

   public int capturarIndiceDispositivoSelecionado(String[] names) {
      String name = (String) JOptionPane.showInputDialog(this, "Selecione um dispositivo: ", "Dispositivo",
                    JOptionPane.QUESTION_MESSAGE,
                    null,
                    names,
                    names[0]);
      if (name != null)
         return Arrays.binarySearch(names, name);
      else
         return -1;
   }

   public Format capturarFormatoSelecionado(Format[] formatosLista) {
      return (Format) JOptionPane.showInputDialog(this,"Selecione um formato: ", "Formatos suportados",
         JOptionPane.QUESTION_MESSAGE,
         null,
         formatosLista,
         null);
   }

   public void informarErro(String error) {
      JOptionPane.showMessageDialog(this, error, "Informação", JOptionPane.ERROR_MESSAGE);
   }

   public File capturarArquivoSalvo() {
      JFileChooser fileChooser = new JFileChooser();
      fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
      int resultado = fileChooser.showSaveDialog(this);
      if (resultado == JFileChooser.CANCEL_OPTION)
         return null;
      else
         return fileChooser.getSelectedFile();
   }

   public void showSaveMonitor() {
      int result = JOptionPane.showConfirmDialog(this,progressoGravacao, "Capturando...",
         JOptionPane.DEFAULT_OPTION,
         JOptionPane.PLAIN_MESSAGE);

      if ((result == JOptionPane.OK_OPTION) || (result == JOptionPane.CLOSED_OPTION)) {
         processor.stop();
         processor.close();
         JOptionPane.showMessageDialog(this,"Captura salva com sucesso!");
      }
   }

   public void captureSaveFile() {
      Format outFormats[] = new Format[1];
      outFormats[0] = formatoSelecionado;
      FileTypeDescriptor outFileType = new FileTypeDescriptor(FileTypeDescriptor.MSVIDEO);
      try {
         processor = Manager.createRealizedProcessor(new ProcessorModel(inSource, outFormats, outFileType));
         if (!gravarDados())
            return;
         processor.start();
         MonitorControl controles = (MonitorControl)processor.getControl("javax.media.control.MonitorControl");
         progressoGravacao = controles.getControlComponent();
         showSaveMonitor();
      }
      catch (NoProcessorException noProcessor) {
         noProcessor.printStackTrace();
      }catch (CannotRealizeException cannotRealize) {
         cannotRealize.printStackTrace();
      }catch (IOException ioException) {
         ioException.printStackTrace();
      }
   }

   public boolean gravarDados() {
      File arquivoSalvo = capturarArquivoSalvo();

      if (arquivoSalvo == null)
         return false;
      saida = processor.getDataOutput();

      if (saida == null) {
         informarErro("Sem saída para processar!");
         return false;
      }
      try {
         MediaLocator localizacaoArquivo = new MediaLocator(arquivoSalvo.toURL());
         dataSink = Manager.createDataSink(saida, localizacaoArquivo);
         dataSink.addDataSinkListener(new DataSinkListener() {
             public void dataSinkUpdate(DataSinkEvent dataEvent) {
                 if (dataEvent instanceof EndOfStreamEvent)
                     dataSink.close();
                 }
             }
         );
         dataSink.open();
         dataSink.start();
      }
      catch ( NoDataSinkException noDataSinkException ) {
         noDataSinkException.printStackTrace();
         return false;
      }
      catch ( SecurityException securityException ) {
         securityException.printStackTrace();
         return false;
      }
      catch ( IOException ioException ) {
         ioException.printStackTrace();
         return false;
      }
      return true;
   }

   public static void main(String args[]){
        CapturaImagens capturaImagens = new CapturaImagens();
        capturaImagens.setSize(300, 300);
        capturaImagens.setVisible(true);
   }
}