Pessoal, no meu programa eu estava usando Java Media Framework (JMF), agora estou migrando pra Java Advanced Image (JAI) e está dando um probleminha… gostaria que pudessem me ajudar…
import javax.swing.*;
import javax.swing.event.*;
import java.io.*;
import javax.media.*;
import javax.media.format.*;
import javax.media.util.*;
import javax.media.control.*;
import javax.media.protocol.*;
import java.util.*;
import java.awt.*;
import java.awt.image.*;
import java.awt.event.*;
import com.sun.image.codec.jpeg.*;
import java.awt.Color;
import javax.imageio.ImageIO;
import java.net.URL;
import javax.media.jai.*;
import javax.media.jai.iterator.*;
import javax.media.jai.iterator.RandomIter;
import javax.media.jai.iterator.RandomIterFactory;
import java.awt.image.renderable.ParameterBlock;
import java.awt.image.*;
import com.sun.media.jai.widget.DisplayJAI;
public class SwingCapture extends Panel implements ActionListener
{
public static Player player = null;
public CaptureDeviceInfo di = null;
public MediaLocator ml = null;
public JButton capture = null;
public Buffer buf = null;
public Image img = null;
public VideoFormat vf = null;
public BufferToImage btoi = null;
public DisplayJAI imgpanel = null;
public SpinnerNumberModel sm1;
public JSpinner jsp1;
public SwingCapture()
{
setLayout(new BorderLayout());
setSize(320,950);
imgpanel = new DisplayJAI();
imgpanel.setSize(320,240);
imgpanel.setLayout(null);
capture = new JButton("Executa Processamento");
capture.addActionListener(this);
sm1 = new SpinnerNumberModel();
jsp1 = new JSpinner(sm1);
this.add(jsp1,"East");
String str1 = "vfw:ICatch (VI) PC Camera:0";
String str2 = "vfw:Microsoft WDM Image Capture (Win32):1";
di = CaptureDeviceManager.getDevice(str2);
ml = di.getLocator();
try {
player = Manager.createRealizedPlayer(ml);
player.start();
Component comp;
if ((comp = player.getVisualComponent()) != null)
{
add(comp,BorderLayout.NORTH);
}
add(capture,BorderLayout.CENTER );
add(imgpanel,BorderLayout.SOUTH);
}
catch (Exception e)
{
e.printStackTrace();
}
}
public PlanarImage RGBtoGray(PlanarImage entrada){
PlanarImage saida=null;
if (entrada.getNumBands() > 1)
{
double[][] matrix = {{ 0.114, 0.587, 0.299, 0 }};
ParameterBlock pb = new ParameterBlock();
pb.addSource(entrada);
pb.add(matrix);
saida = JAI.create("bandcombine", pb, null);
}
return saida;
}
public PlanarImage Zoom(PlanarImage entrada,float escalaX,float escalaY){
ParameterBlock pb = new ParameterBlock();
pb.addSource(entrada);
pb.add(escalaY);
pb.add(escalaY);
pb.add(0.0F); pb.add(0.0F);
pb.add(new InterpolationNearest());
PlanarImage scaledImage = JAI.create("scale", pb);
return scaledImage;
}
public PlanarImage sobel(PlanarImage entrada){
PlanarImage saida=null;
if (entrada.getNumBands() > 1)
{
System.out.println("Numero de pixels pretos: 4" );
float[] sobel_h_data = { 1.0F, 0.0F, -1.0F,
2.0F, 0.0F, -2.0F,
1.0F, 0.0F, -1.0F};
float[] sobel_v_data = {-1.0F, -2.0F, -1.0F,
0.0F, 0.0F, 0.0F,
1.0F, 2.0F, 1.0F};
KernelJAI kern_h = new KernelJAI(3,3,sobel_h_data);
KernelJAI kern_v = new KernelJAI(3,3,sobel_v_data);
// Create the Gradient operation.
PlanarImage im1 =(PlanarImage)JAI.create("gradientmagnitude", entrada,kern_h, kern_v);
saida = im1;
}else
{
System.out.println(" else ");
}
return saida;
}
public void processaImagem(Image img, String s) {
// Obt�m primeira imagem em preto-e-branco
BufferedImage bi1 = new BufferedImage(img.getWidth(null), img.getHeight(null), BufferedImage.TYPE_BYTE_GRAY);
Graphics2D g2d = bi1.createGraphics();
g2d.drawImage(img, null, null);
g2d.dispose();
PlanarImage imagem123 = PlanarImage.wrapRenderedImage((RenderedImage)bi1);
if (imagem123 == null)
System.out.println("� null" );
PlanarImage imagemRes = Zoom(imagem123, 1,1);
imgpanel.set(imagemRes);
System.out.println("-----Final------------------------------------" );
}
public static void main(String[] args)
{
Frame f = new Frame("Captura de Imagem");
SwingCapture cf = new SwingCapture();
f.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
playerclose();
System.exit(0);}});
f.add("Center",cf);
f.pack();
f.setSize(new Dimension(320,550));
f.setVisible(true);
}
public static void playerclose()
{
player.close();
player.deallocate();
}
public void actionPerformed(ActionEvent e)
{
JComponent c = (JComponent) e.getSource();
if (c == capture)
{
// Capturar um Frame
FrameGrabbingControl fgc = (FrameGrabbingControl)
player.getControl("javax.media.control.FrameGrabbingControl");
buf = fgc.grabFrame();
// Convert�-lo para imagem
btoi = new
BufferToImage((VideoFormat)buf.getFormat());
img = btoi.createImage(buf);
// Salva a Imagem
saveJPG(img,"c:\\Foto.jpg");
// Executar os procedimentos
processaImagem(img,"c:\\Foto.jpg");
}
Então aparece o seguinte erro:
Exception in thread "main" java.lang.NullPointerException
at SwingCapture.<init>(SwingCapture.java:61)
at SwingCapture.main(SwingCapture.java:163)
Java Result: 1
CONSTRUÍDO COM SUCESSO (tempo total: 17 segundos)
Desde Já Muito Obrigado