我已经使用官方示例使用 Camera2 API 来捕获 RAW 传感器帧。代码在 java 中,但我在 Android Studio 的帮助下将其转换为 Kotlin。我对其进行了测试,我能够拍摄一张 dng 图片并将其保存到我的手机中。到目前为止没有问题。
但我真正想要的是能够检索到有关图片的一些信息,我不在乎保存它。我想直接用我的智能手机进行处理。
到目前为止,我尝试的是获取图像的字节数组。在函数dequeueAndSaveImage
中,我从 ImageReader 中检索图像:image = reader.get()!!.acquireNextImage()
。我想这就是我必须处理图像的地方。我尝试记录image.width
,image.height
并且image.planes.count
没有问题。顺便说一句,由于格式为RAW_SENSOR
,因此image.planes.count
为 1,对应于原始传感器图像数据的单个平面,每个颜色样本为 16 位。
但是,当我尝试记录image.planes[0].buffer.array().size
例如时,我得到了一个FATAL EXCEPTION: CameraBackground
with java.lang.UnsupportedOperationException
。
如果我试图记录同样的事情,但是在将图像保存到 dng 文件的函数中,我会得到另一种类型的错误FATAL EXCEPTION: AsyncTask #1
:java.lang.UnsupportedOperationException
我是否以正确的方式检索有关图像的信息?例如像素的强度、平均值、每个颜色通道的标准偏差等......
编辑:我认为我找到了问题,虽然不是解决方案。当我登录image.planes[0].buffer.hasArray()
时,它返回 false,这就是调用array()
引发异常的原因。
但是,我如何从图像中获取数据?