Boa noite a todos.
Estou utilizando uma classe, que consegui nesse mesmo fórum, para exibir a imagem da webcam ao vivo em um JPanel.
Funciona da seguinte forma, existe uma classe, na qual há um JPanel. Nesse JPanel eu chamo um add para outra classe que extende um JPanel. Essa segunda classe é que faz a captura da webcam e tal. Essa imagem é colocada eum outro JPanel que possui um JButton dentro, ou seja, fica um JPanel dentro de outro.
O problema é, quando a imagem da webcam está rolando, o botão não aparece. Se eu estou sem webcam no computador, o botão aparece.
Alguém tem idéia do que possa ser? Eu fui claro?
posta o codigo ae…se nao fica dificil…
[code]private JPanel getJPanelWebCam() {
if (jPanelWebCam == null) {
jPanelWebCam = new JPanel();
jPanelWebCam.setLayout(null);
jPanelWebCam.setBounds(new Rectangle(10, 10, 320, 480));
jPanelWebCam.setBorder(BorderFactory.createTitledBorder(null,
“Foto”, TitledBorder.LEADING, TitledBorder.TOP,
new Font(“Dialog”, Font.BOLD, 14), new Color(51, 51, 51)));
jPanelWebCam.add(getCapturaFoto1(), null);
}
return jPanelWebCam;
}
private CapturaFoto getCapturaFoto1() {
if (capturaFoto1 == null) {
capturaFoto1 = new CapturaFoto();
capturaFoto1.setBounds(new Rectangle(10, 22, 327, 259));
}
return capturaFoto1;
}
[/code]
Esse é o método da classe ImagemWebCam que cria o JPanel.
E esse logo abaixo é a classe CapturaFoto
package testewebcam;
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Panel;
import java.awt.Rectangle;
import java.awt.image.BufferedImage;
import java.awt.image.RenderedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.media.Buffer;
import javax.media.CaptureDeviceInfo;
import javax.media.Manager;
import javax.media.MediaLocator;
import javax.media.Player;
import javax.media.cdm.CaptureDeviceManager;
import javax.media.control.FrameGrabbingControl;
import javax.media.format.VideoFormat;
import javax.media.util.BufferToImage;
import javax.swing.JButton;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
public class CapturaFoto extends JPanel {
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 BufferedImage img = null;
public VideoFormat vf = null;
public BufferToImage btoi = null;
public ImagePanel imgpanel = null;
private static final long serialVersionUID = 1L;
private JButton captura = null;
public void finaliza(){
player.stop();
}
public CapturaFoto() {
super();
initialize();
}
private void initialize() {
this.setLayout(new BorderLayout());
this.setSize(320,280);
this.add(getCaptura(), null);
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){
String caminho = "C:\\imagem.jpg";
try {
ImageIO.write((RenderedImage) imagem, "jpg", new File(caminho));
player.stop();
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(50,50,50,50);
captura.addActionListener(new java.awt.event.ActionListener() {
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 = (BufferedImage) btoi.createImage(buf);
gravaImg(img);
setImage(img);
}
});
}
return captura;
}
public void setImage(BufferedImage img){
this.img = img;
}
public BufferedImage getImage(){
return this.img;
}
class ImagePanel extends Panel {
private static final long serialVersionUID = 1L;
public Image myimg = null;
public ImagePanel() {
JOptionPane.showMessageDialog(null, "setando a classe");
setLayout(null);
setSize(320, 240);
}
public void setImage(Image img) {
this.myimg = img;
repaint();
}
public void paint(Graphics g) {
if (myimg != null) {
g.drawImage(myimg, 0, 0, this);
}
}
}
}