我想通过java从网络摄像头拍摄快照。我跟着this question来到了example。但是有一个空指针异常来自下面的行 -
Buffer buf = frameGrabber.grabFrame();
Image img = (new BufferToImage((VideoFormat) buf.getFormat())
.createImage(buf));
buffImg = new BufferedImage(img.getWidth(this), img.getHeight(this),
BufferedImage.TYPE_INT_RGB);
通过调试器,我发现缓冲区实际上并不包含数据。所以我去创建了frameGrabber。
frameGrabber = (FrameGrabbingControl) player
.getControl("javax.media.control.FrameGrabbingControl");
此代码是否存在问题。因为JMFStudio在我的机器上工作正常,但代码无法访问它。谢谢。
答案 0 :(得分:1)
我找到了解决方案。 JMF需要时间进行初始化。在示例中,我们必须切换一条线。把
new Timer(3000, this).start();
在try catch下方。
整个区块如下所示。
try {
player = Manager.createRealizedPlayer(cdi.getLocator());
player.start();
} catch (NoPlayerException e) {
e.printStackTrace();
} catch (CannotRealizeException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
new Timer(3000, this).start();
// Grab a frame from the capture device
frameGrabber = (FrameGrabbingControl) player
.getControl("javax.media.control.FrameGrabbingControl");