【发布时间】:2019-04-05 19:52:57
【问题描述】:
我在我的一个应用程序中使用 Camera2 示例代码:https://github.com/googlesamples/android-Camera2Basic/blob/master/Application/src/main/java/com/example/android/camera2basic/Camera2BasicFragment.java
它一直运行良好,直到最近该应用程序在图像捕获时崩溃,但仅在 Google Pixel 2 和 Pixel 2 XL 设备上崩溃。
崩溃报告显示如下:
java.lang.NullPointerException:
at ....Camera2BasicFragment$ImageSaver.run (Camera2BasicFragment.java:935)
at android.os.Handler.handleCallback (Handler.java:873)
at android.os.Handler.dispatchMessage (Handler.java:99)
at android.os.Looper.loop (Looper.java:193)
at android.os.HandlerThread.run (HandlerThread.java:65)
这是第 935 行(ImageSaver 类):
ByteBuffer buffer = mImage.getPlanes()[0].getBuffer();
我尝试了一些方法,但由于我没有 Pixel 2 设备,因此无法测试。有什么建议吗?
更新(2018 年 11 月 5 日):
所以合乎逻辑的解释是,从 ImageReader 返回的图像在某种程度上为空:
@Override
public void onImageAvailable(ImageReader reader) {
mBackgroundHandler.post(new ImageSaver(reader.acquireLatestImage(), mFile));
}
SO 上的其他一些帖子表明可能不支持 ImageReader 格式。这是格式:
mImageReader = ImageReader.newInstance(largest.getWidth(), largest.getHeight(),
ImageFormat.JPEG, /*maxImages*/2);
但我无法想象为什么 JPEG 会是一种不受支持的格式。
仍在寻找答案!
【问题讨论】:
-
那个示例应用没有
Camera2ApiActivity.java...1173行是什么意思? -
@MartinZeitler 抱歉,我现在更新了行号以匹配示例代码以便于理解。
-
很久没用Camera2 API了。但这是我的假设。如果我没记错的话,该回调用于预览。不适用于拍摄的图像。大多数设备允许帧的预览流采用 JPEG 格式,但不是所有设备。所有设备的格式都是 de YUV 格式。我会说您可以尝试将格式更改为YUV。