Opa galera…
Seguinte… estou tentando tirar uma foto com a webCam e abri-la em um novo JFrame…
A função que inicializa o Player para a câmera é a seguinte…
private void inicializa(){
if( camera != null ){
try {
player = Manager.createRealizedPlayer( camera.getLocator() );
if( player != null ){
player.start();
formatControl = (FormatControl)player.getControl ( "javax.media.control.FormatControl" );
imageSize = ((VideoFormat)formatControl.getFormat()).getSize();
}else{
System.err.println("DETECTOR DE MOVIMENTO - Null player.");
}
} catch (NoPlayerException npE) {
System.err.println("DETECTOR DE MOVIMENTO - Não foi possível criar o player.");
System.out.println(npE);
} catch (CannotRealizeException crE) {
System.err.println("DETECTOR DE MOVIMENTO - Não foi possível realizar o player.");
System.out.println(crE);
} catch (IOException ioE) {
System.err.println("DETECTOR DE MOVIMENTO - Erro ao conectar com a câmera.");
System.out.println(ioE);
}
}else{
System.out.println("DETECTOR DE MOVIMENTO - Nenhuma câmera definida para detecção de movimento.");
}
}
A seguinte função é utilizada para recuperar o Buffer para a câmera, para que a foto possa ser tirada…
private Buffer getFrameBuffer( ){
if ( player != null ){
FrameGrabbingControl fgc = (FrameGrabbingControl)player.getControl ( "javax.media.control.FrameGrabbingControl" );
if ( fgc != null ){
return ( fgc.grabFrame() );
}else{
System.err.println ("DETECTOR DE MOVIMENTO - FrameGrabbingControl is null");
return ( null );
}
}else{
System.err.println ("DETECTOR DE MOVIMENTO - Player is null");
return ( null );
}
}
As duas funções acima aparentam executar sem erro… aparentam…
A próxima função é a que realmente tira a foto…
private Image getScreenShot() {
Buffer buffer = getFrameBuffer();
if ( buffer != null ){
//Converte o buffer para uma imagem
BufferToImage btoi = new BufferToImage ( (VideoFormat)buffer.getFormat() );
if ( btoi != null ){
Image image = btoi.createImage ( buffer );
if ( image != null ){
return ( image );
}else{
System.err.println ("DETECTOR DE MOVIMENTO - BufferToImage não pode converter o buffer.");
return ( null );
}
}else{
System.err.println ("DETECTOR DE MOVIMENTO - Não foi possível criar uma instância de BufferToImage.");
return ( null );
}
}else{
System.err.println ("DETECTOR DE MOVIMENTO - Buffer nulo.");
return ( null );
}
}
Quando a função acima é executada o sistema imprime a mensagem…
DETECTOR DE MOVIMENTO - BufferToImage não pode converter o buffer.
Portanto a linha Image image = btoi.createImage ( buffer ) está retornando null…
Estas duas ultimas funções ( De resgatar o buffer e tirar a foto ) eu copiei de um tutorial que eu axei na net e tal…
Tem alguma coisa errada com o código ?
As duas ultimas funções eu tenho praticamente certeza que estão corretas pois o sistema do tutorial está funcionando…
Existe alguma coisa a mais que eu deva fazer na função inicializa() para poder tirar a foto ?
Aguardo respostas…
Obrigado.
