我想通过java从网络摄像头拍摄快照。我按照这个问题得出了这个例子。但是有一个空指针异常来自以下行 -
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 在我的机器中工作正常,但代码无法访问它。谢谢。
我找到了解决方案。JMF 需要时间来初始化。在示例中,我们必须切换一行。把
new Timer(3000, this).start();
在尝试捕获下方。
整个块如下所示。
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");