在 Android 相机 2 API 中。我可以使用图像 reader (YUV_420_888) 进行处理,而另一个 (JPEG) 用于捕获静止图像吗?
In Android Camera2 API. Can I use a image reader (YUV_420_888) for processing and another(JPEG) for capture still image?
我试过,但是当我按下拍摄按钮时预览冻结,没有创建图像。有什么建议吗?
我可以在一个 Camera2 项目中使用多少个图像阅读器?
对于您正在创建的每个 CaptureSession,您只能有一个 ImageReader。如果您想为每种类型的图像使用两个不同的 ImageReader,那么您应该使用两个 CaptureSession。但是您必须非常小心地处理两个会话之间的相机资源(例如,您应该在启动其他 CaptureSession 以捕获 YUV_420_888 图像之前关闭 JPEG 的 ImageReader)。使用多个 CaptureSession 对设备来说也很沉重,通常不推荐使用。反而
您可以对两种类型的图像使用相同的字节。
public void onImageAvailable(ImageReader imageReader) {
byte[] bytes = null;
Image image = imageReader.acquireLatestImage();
try {
ByteBuffer buffer = image.getPlanes()[0].getBuffer();
bytes = new byte[buffer.capacity()];
buffer.get(bytes);
//use the bytes to manipulate
} catch (Exception e) {
e.printStackTrace();
}
image.close();
imageReader.close();
}
我试过,但是当我按下拍摄按钮时预览冻结,没有创建图像。有什么建议吗? 我可以在一个 Camera2 项目中使用多少个图像阅读器?
对于您正在创建的每个 CaptureSession,您只能有一个 ImageReader。如果您想为每种类型的图像使用两个不同的 ImageReader,那么您应该使用两个 CaptureSession。但是您必须非常小心地处理两个会话之间的相机资源(例如,您应该在启动其他 CaptureSession 以捕获 YUV_420_888 图像之前关闭 JPEG 的 ImageReader)。使用多个 CaptureSession 对设备来说也很沉重,通常不推荐使用。反而 您可以对两种类型的图像使用相同的字节。
public void onImageAvailable(ImageReader imageReader) {
byte[] bytes = null;
Image image = imageReader.acquireLatestImage();
try {
ByteBuffer buffer = image.getPlanes()[0].getBuffer();
bytes = new byte[buffer.capacity()];
buffer.get(bytes);
//use the bytes to manipulate
} catch (Exception e) {
e.printStackTrace();
}
image.close();
imageReader.close();
}