Olá, sou novo aqui no fórum, inclusive me cadastrei nele por ver que ele se destaca na área. No momento curso ciência da computação na UEZO/RJ e estou pegando um projeto na Iniciação Científica e estou com certa dificildade no manuseio da biblioteca JMF.
A proposta inicial, seria desenvolver um sistema em Java + MatLab, aonde o programa principal em java captaria a imagem pela placa de video, o usuario então iria acionar um JButton para capturar uma foto de uma microcamera na área biomédica e trabalharia com certas ferramentas que disponibilizaremos no programa para a edição da imagem (ai que entra o matlab que é ÓTIMO para o trabalho em cima de matrizes).
Bom, parando com toda essa enrolação, começando o projeto agora, já desenvolvi a interface e algumas funções que farão parte do todo, mas para o ‘teste’ utilizarei a captura da imagem de uma webcam para simular como se fosse a ‘tal’ microcamera que mais pra frente instalaremos.
mas eu não estou conseguindo abrir a webcam em um JPanel (que no início era a minha primeira proposta).
Peguei um código ‘pré’ pronto em um fórum, que no caso, funcionando a webcam em qualquer código, eu adapto para o meu sistema, mas nem isso eu estou conseguindo.
De acordo com os códigos que peguei, inclusive no GUJ, o código era pra funcionar, mas não funciona.
A minha webcam está corretamente instalada e funciona perfeitamente em qualquer software que a requisite-a.
A primeira linha que identifica o erro diz:
- javax.media.NoPlayerException: Cannot find a Player for :vfw:0
Lendo na internet sobre esse erro, vi que o erro esteja talvez no “VTW:0” que pode ser vários valores de acordo com o sistema e webs.
Testei também:
- vfw:Logitech USB Video Camera:0
- vfw:Microsoft WDM Image Capture (Win32):0
- Microsoft WDM Image Capture:0
- vtw://0
E continua no mesmo erro.
Li também sobre o JMStudio, baixei ele e compilei pelo próprio DOS, mesmo com alguns erros rodou, e quando botei pra identificar os “devices” ele não identificou nenhum nesse modelo, apenas o JavaSound Audio Capture.
Quaquer ajudar será bem vindo, ainda sou meio ‘inexperiente’ em java e to apanhando MUITO aqui, já perdi diversas noites de sono e não consigo sair disso :S
Vou botar o código aqui também.
[code]import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.image.RenderedImage;
import java.io.File;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.imageio.ImageIO;
import javax.media.Buffer;
import javax.media.CaptureDeviceInfo;
import javax.media.CaptureDeviceManager;
import javax.media.Manager;
import javax.media.MediaLocator;
import javax.media.Player;
import javax.media.control.FrameGrabbingControl;
import javax.media.format.VideoFormat;
import javax.media.util.BufferToImage;
import javax.swing.JButton;
import javax.swing.JOptionPane;
public class CapturaFoto extends javax.swing.JFrame {
private static final long serialVersionUID = 1L;
public static Player player = null;
public CaptureDeviceInfo di = null; // @jve:decl-index=0:
public MediaLocator ml = null; // @jve:decl-index=0:
public JButton capture = null;
public Buffer buf = null;
public Image img = null;
public VideoFormat vf = null;
public BufferToImage btoi = null;
public ImagePanel imgpanel = null;
private JButton captura = null;
public CapturaFoto() {
super();
initComponents();
initialize();
this.setSize(600,530);
setLocation(170, 05);
}
private void initialize() {
this.setLayout(new BorderLayout());
this.setSize(600,500);
this.add(getCaptura(), BorderLayout.SOUTH);
this.setVisible(true);
String str2 = "vfw:\\0";
di = CaptureDeviceManager.getDevice(str2);
ml = new MediaLocator("vfw:\\0");
try {
player = Manager.createRealizedPlayer(ml);
player.start();
Component comp;
if ((comp = player.getVisualComponent()) != null) {
add(comp, BorderLayout.NORTH);
}
add(captura, BorderLayout.SOUTH);
} catch (Exception e) {
e.printStackTrace();
}
}
public void gravaImg (Image imagem) throws IOException{
String caminho = "C:/photos"+"00"+".JPG";
try {
ImageIO.write((RenderedImage) imagem, "jpg", new File(caminho));
JOptionPane.showMessageDialog(this, "Imagem Capturada!");
} catch (IOException e) {
JOptionPane.showMessageDialog(null, "não foi possivel encontrar " + "o dispositivo para a captura da imagem.");
e.printStackTrace();
}
}
private JButton getCaptura() {
if (captura == null) {
captura = new JButton("Captura");
captura.setBounds(10, 10, 600, 500);
captura.addActionListener(new java.awt.event.ActionListener() {
@Override
public void actionPerformed(java.awt.event.ActionEvent e) {
FrameGrabbingControl fgc = (FrameGrabbingControl) player
.getControl("javax.media.control.FrameGrabbingControl");
buf = fgc.grabFrame();
btoi = new BufferToImage((VideoFormat) buf.getFormat());
img = btoi.createImage(buf);
try {
gravaImg(img);
} catch (IOException ex) {
Logger.getLogger(CapturaFoto.class.getName()).log(Level.SEVERE, null, ex);
}
}
});
}
return captura;
}
class ImagePanel extends javax.swing.JPanel {
private static final long serialVersionUID = 1L;
public Image myimg = null;
public ImagePanel() {
JOptionPane.showMessageDialog(null, "setando a classe");
setLayout(null);
setSize(630,530);
}
public void setImage(Image img) {
this.myimg = img;
repaint();
}
@Override
public void paint(Graphics g) {
if (myimg != null) {
g.drawImage(myimg, 0, 0, this);
}
}
}
private void initComponents() {
setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
setTitle("Capturar Foto");
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 607, Short.MAX_VALUE)
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 489, Short.MAX_VALUE)
);
pack();
}
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
new CapturaFoto().setVisible(true);
}
});
}
}[/code]