Estou precisando armazernar fotos tiradas de um web cam utilizando swing alguém já faz e pode dar uma dica ?
obs: já vi alguns posts mais estão confusos.
Obrigado.
Fiz minha classe WebCamUtil com o DirectShow Java (DSJ para os intimos ). O DSJ é bem fácil de usar e tem exemplos completos de como implementar.
Vou postar a parte mais importante da minha implementação e anexar ela completa pra você se basear, ok?
[code]public class WebCamUtil extends javax.swing.JDialog{
private static DSCapture player;
private BufferedImage frame;
public WebCamUtil(java.awt.Frame parent, boolean modal) {
super(parent, modal);
initComponents();
setLocationRelativeTo(null);
pnlPlayer.setSize(640, 480);
pnlPlayer.add(player.asComponent());
}
/**
* Inicia a conexão com a WebCam
*/
public static void iniciarWebCam(){
try {
File f = new File("lib\\dsj.dll");
DSFilterInfo[][] dsi = null;
try {
if(f.exists())
DSEnvironment.setDLLPath(f.getAbsoluteFile().toString());
dsi = DSCapture.queryDevices();
} catch (UnsatisfiedLinkError u) {
JOptionPane.showMessageDialog(null, "O Arquivo \"dsj.dll\" Não Foi Encontrado Em\n"+f.getAbsolutePath().replace("\\dsj.dll", ""),
"Atenção", JOptionPane.ERROR_MESSAGE);
}
if(dsi[0][0].getName().equalsIgnoreCase("PC Camera"))
dsi[0][0].setPreferredFormat(2);
player = new DSCapture(DSFiltergraph.DD7, dsi[0][0], false, DSFilterInfo.doNotRender(), null);
player.setSize(640, 480);
player.stop();
} catch (Exception e) {
JOptionPane.showMessageDialog(null, "Não Foi Possível Iniciar a WebCam. Possíveis Causas:"
+ "\n- O Aplicativo Já Esta Sendo Executado (Gerenciador de Tarefas -> Processos -> javaw.exe)"
+ "\n- A WebCam Está Desconectada"
+ "\n- O Windows Não Reconheceu a WebCam",
"Atenção", JOptionPane.ERROR_MESSAGE);
}
}
/**
* Retorna o frame capturado
* @return BufferedImage
*/
public BufferedImage getFoto() {
return frame;
}
/**
* Redimensiona a foto
* @param foto
* @param w
* @param h
* @return Image
*/
public static Image resizeFoto(BufferedImage foto, int w, int h){
return foto.getScaledInstance(w, h, 0);
}
/**
* Salva a foto e retorna o caminho
* @param foto
* @param tipo
* @return String
*/
public static void salvarFoto(BufferedImage foto, File path){
try {
if(!path.exists())
local.mkdirs();
ImageIO.write(foto, "PNG", path);
} catch (IOException e) { }
}
private void btnCapturarActionPerformed(java.awt.event.ActionEvent evt) {
btnOutra.setEnabled(true);
btnAceitar.setEnabled(true);
btnCapturar.setEnabled(false);
try {
player.stop();
} catch (Exception e) { }
frame = player.getImage();
}
private void btnAceitarActionPerformed(java.awt.event.ActionEvent evt) {
try {
player.stop();
} catch (Exception e) { }
setVisible(false);
}
private void btnOutraActionPerformed(java.awt.event.ActionEvent evt) {
btnOutra.setEnabled(false);
btnAceitar.setEnabled(false);
btnCapturar.setEnabled(true);
frame = null;
btnCapturar.grabFocus();
try {
player.play();
} catch (Exception e) { }
}
private void btnCancelarActionPerformed(java.awt.event.ActionEvent evt) {
try {
player.stop();
} catch (Exception e) { }
setVisible(false);
}
private void formWindowActivated(java.awt.event.WindowEvent evt) {
btnOutra.setEnabled(false);
btnAceitar.setEnabled(false);
btnCapturar.setEnabled(true);
try {
player.play();
} catch (Exception e) { }
btnCapturar.grabFocus();
}
// ...
}[/code]
OBS 1: A classe (anexo) é uma implementação do JDialog. Basta instancia-la que já estará funcionando (teoriacamente )
OBS 2: Adicione os arquivos dsj.jar e dsj.dll (download) na pasta lib
OBS 3: OS métodos estáticos resizeFoto() e salvarFoto() podem ajudar
Qualquer dúvida estamos ai!
Legal, não conhecia o projeto.
Eu não usaria hoje a JMF. Foi abandonada, é difícil de usar.
Eu sofri bastante com o JMF antes de conhecer o DSJ. Era muita incompatibilidade e o código não era “gatinho”
Obrigado vini e adriel, vou implatar a classe depois dou feedback.
Força e Avante.
Só uma pergunta adriel eu posso colocar essas dll dentro do meu projeto, ou tenho que colocar na pasta Java ?
Essa DLL pode ficar na pasta System32 do Windows ou onde você desejar, basta carregá-la pela aplicação.
Se você olhar no método [color=blue]iniciarWebCam()[/color] você vai encontrar as seguintes linhas:
File f = new File("lib\\dsj.dll");
// ...
if(f.exists())
DSEnvironment.setDLLPath(f.getAbsoluteFile().toString());
Precisamos carregar a DLL com o [color=blue]DSEnvironment.setDLLPath()[/color], escolhi guardá-la na pasta LIB. Isso fica a seu critério.
A tá massa eim, porque senão na hora de instalar o sistema ficar chato.
Valeu mesmo cara.
tentei implementar mas ta dando o seguinte erro
Exception in thread “AWT-EventQueue-0” java.lang.NullPointerException
at WebCamUtil.(WebCamUtil.java:24)
at WebCamUtil$1.run(WebCamUtil.java:152)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:251)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:705)
at java.awt.EventQueue.access$000(EventQueue.java:101)
at java.awt.EventQueue$3.run(EventQueue.java:666)
at java.awt.EventQueue$3.run(EventQueue.java:664)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:675)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:211)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:12
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:117)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:113)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:90)
não faço a minima ideia o que seja mas espero que seja coisa bouba
Olá amigos tb estou com o mesmo erro.
e agora? :?
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at visual.WebCamUtil.<init>(WebCamUtil.java:24)
at visual.WebCamUtil$1.run(WebCamUtil.java:152)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:251)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:705)
at java.awt.EventQueue.access$000(EventQueue.java:101)
at java.awt.EventQueue$3.run(EventQueue.java:666)
at java.awt.EventQueue$3.run(EventQueue.java:664)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:675)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:211)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:128)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:117)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:113)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:90)
Estava vendo essa aplicação, o problema do nullpointer Excetion é o
public WebCamUtil(java.awt.Frame parent, boolean modal) {
super(parent, modal);
initComponents();
iniciarWebCam();//NECESSÁRIO INICIAR A WEBCAM PARA CONSEGUIR USAR OS RECURSOS.
setLocationRelativeTo(null);
pnlPlayer.setSize(640, 480);
pnlPlayer.add(player.asComponent());
}
Ricardo
Vocês chamaram o método estático iniciarWebcam antes do construtor?
Boa noite amigos o meu ficou 100%
Obrigado a todos…
Agora quero implementar um “crop” na foto…
meu construtor ficou assim:
public WebCamUtil(java.awt.Frame parent, boolean modal) {
super(parent, modal);
initComponents();
setLocationRelativeTo(null);
iniciarWebCam(); // ESSE É O METODO
pnlPlayer.setSize(640, 480);
pnlPlayer.add(player.asComponent());
}
Galera, o meu deu o seguinte erro:
java.lang.UnsatisfiedLinkError: C:\Users\eliton\Documents\Workspace\APS\APS\lib\dsj.dll: Can’t load IA 32-bit .dll on a AMD 64-bit platform, Make sure the dsj.dll is on the library path & DirectX9 and WindowsMediaPlayer 9 or greater are installed
o que pode ser?
Valeuu
dodge, acho que vc deve usar a dsj.dll para 64 … e não a 32.
putz era isso mesmo !!! falta de atenção minha!!
valeu pela ajuda cara ^^
Boa Noite pessoal, estou com problema ao usar o código anexo, ele não dá nenhum erro apenas não exibe a imagem da webcam, detalhe quando executa o play ou stop a webcam desliga.
eu uso um not com webcan integrada, pode ser esse o motivo?
preciso muito de ajuda para carregar a imagem.
Galera,
Usei o código acima e com uns pequenos ajustes funcionou beleza, ta salvando as fotos e tudo.
O problema é que a Imagem não aparece no JDialog! É assim mesmo?