Applet c/ WebCam

2 respostas
M

Boa tarde.

Tenho esse seguinte applet:

import java.applet.Applet;   
import java.awt.BorderLayout;   
import java.awt.Component;   
import java.awt.Graphics;   
import java.awt.Image;   
import java.awt.event.ActionEvent;   
import java.awt.event.ActionListener;   
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.JComponent;   
import javax.swing.JFileChooser;
import javax.swing.JOptionPane;   
import TO.VisitanteTO;
  
public class WebCamVisitante extends Applet implements ActionListener {   
  
    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 void init() {   
    	this.setLayout(new BorderLayout());   
        this.setSize(320, 280);   
        this.setVisible(true);
        paint();
    }
    */
    
    public void paint(Graphics g) {   
     	this.setLayout(new BorderLayout());   
        this.setSize(320, 280);   
        this.setVisible(true);
    	capture = new JButton("Gravar");   
        capture.addActionListener(this);   
  
        // This may differ check the jmf registry for   
        // correct entry   
        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(capture, BorderLayout.CENTER);   
        } catch (Exception e) {   
            e.printStackTrace();   
        }
        g.drawString("Welcome in Java Applet.",40,20);
    }   
  
    public static void playerclose() {   
        player.close();   
        player.deallocate();   
    }   
  
    public void actionPerformed(ActionEvent e) {   
        JComponent c = (JComponent) e.getSource();   
        if (c == capture) {   
            // Grab a frame   
            FrameGrabbingControl fgc = (FrameGrabbingControl) player   
                    .getControl("javax.media.control.FrameGrabbingControl");   
            buf = fgc.grabFrame();   
  
            // Convert it to an image   
            btoi = new BufferToImage((VideoFormat) buf.getFormat());   
            img = btoi.createImage(buf);   
            // show the image   
        }   
    }   
  
    public Image getImagem(){   
    	return img;
    	/*
    	JFileChooser fileChooser = new JFileChooser();   
        fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
        int resultado = fileChooser.showSaveDialog(this);   
        String caminho = ""+fileChooser.getSelectedFile();
        caminho += ".jpg";
        JOptionPane.showMessageDialog(null,caminho);
        try {   
            ImageIO.write((RenderedImage) imagem, "PNG", new File(caminho));   
        } catch (IOException e) {   
            JOptionPane.showMessageDialog(null, "não foi possivel encontrar " +   
                    "o dispositivo para a captura da imagem.");   
            e.printStackTrace();   
        }
        */   
    }   
}

E a seguinte JSP:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@page import="java.applet.Applet"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Capturar Imagem</title>
</head>

<script type="text/javascript">

function defineValor(vlr){
	obj = document.getElementById("Operacao");
	obj.value = vlr;
	Camera.submit();
}
</script>

<body>
<form id="Camera" name ="Camera" action="VisitanteControle" method="post">
<input type="hidden" id="Operacao" name="Operacao">
	<APPLET ALIGN="CENTER" CODE="WebCamVisitante" WIDTH="800" HEIGHT="500">
	</APPLET>

	
</form>
</body>

</html>

O arquivo WebCamVisitante.class está na mesma pasta da JSP.

Quando eu rodo o APPLET sozinho, ele inicia a Camera e mostra a imagem.

Quando eu chamo pela JSP, a única coisa que aparece é o " g.drawString(“Welcome in Java Applet.”,40,20);" do método “paint”.

Pergunta: porque quando eu rodo a Applet sozinha, ele incia o JMF e exibe a imagem e pq quando rodo ela pela JSP, ele passa por todos os comandos e exibe apenas Welcome in Java Applet."?

2 Respostas

Z

Olá mvergani,

Cara eu acho que é pq vc precisa dar acesso a sua webcam. Assim qnd vc roda local a app tem acesso a sua webcam, agora qnd vc roda na jsp qqr um pode ser o client, imagina se vc tivesse acesso fácil a webcam do cara, ao HD, ao teclado, entendeu? Tente procurar na net um exemplo em flash q acesse a webcam, antes do acesso ele pergunta se tem permissão para acessa-lá.
Infelizmente não vou poder ajudar mto, mas procure algo sobre isso.

abss

M

Zabimaru, bom dia.

Agradeço sua resposta.

Em Flash eu consigo então? Vou dar uma pesquisada.

Eu tentei até em fazer de outra forma: esse sistema é de controle de condomínio. Essa função seria a de controle de visitante, onde na portaria cada visitante tira uma foto e preenche nome e rg. Na máquina do “porteiro”, rodaria um .RAR apenas dessa função porém, eu preciso fazer uma forma da tela web “esperar” que o JAR abra e quando tirar a foto, fechar o RAR e mandar a foto pro banco.

Criado 5 de maio de 2010
Ultima resposta 6 de mai. de 2010
Respostas 2
Participantes 2