我正在尝试预览RAW帧并以有效的方式对值进行直方图化。在YUV格式中,可以通过在Camera2 API中将RenderScript Allocation设置为目标曲面来完成此操作:
Allocation ain = Allocation.createTyped(mRS, new Type.Builder(mRS, Element.YUV(mRS))
.setX(mPreviewSize.getWidth())
.setY(mPreviewSize.getHeight())
.setYuvFormat(ImageFormat.YUV_420_888)
.create(), Allocation.USAGE_IO_INPUT | Allocation.USAGE_SCRIPT);
Surface surface = ain.getSurface()
mPreviewRequestBuilder.addTarget(surface);
mCameraDevice.createCaptureSession(Arrays.asList(surface), mStateCallback, null);
然后使用ScriptIntrinsicHistogram
。是否可以将RAW图像直接流式传输到Allocation
?
我知道ScriptIntrinsicHistogram
仅适用于uchar
类型,而RAW通常有10位。但是,我对0-255范围更感兴趣,所以我很满意在RenderScript内核中首先截断前导位。
我也知道可以使用ImageReader
获取RAW缓冲区,复制到数组,然后重新复制到Allocation
,但对于16 MP图像,我希望更多有效的解决方案是可能的。
由于