我想在相机预览中进行一些图像处理,例如灰度 在老相机api很容易,但移植到camera2 api,我不知道该怎么做
public void onPreviewFrame(byte[] data, Camera cam) {
// custom image data processing
}
我试图从这里获取框架(如问题的答案所示):
private final ImageReader.OnImageAvailableListener mOnImageAvailableListener
= new ImageReader.OnImageAvailableListener() {
@Override
public void onImageAvailable(ImageReader reader) {
Log.d("Img", "onImageAvailable");
mBackgroundHandler.post(new ImageSaver(reader.acquireNextImage(), mFile));
}
};
他没用,因为只有在用户执行了图像捕获后才会调用回调
答案 0 :(得分:4)
来自Google https://github.com/googlesamples/android-HdrViewfinder的此示例提供了您需要执行的基本操作。
要点:
1)将 Surface 添加到相机的输出
2)收听此表面的更新,在上面的示例中,它发生在 ViewfinderProcessor.java
上面的示例使用2个曲面进行假HDR预览,但您应该能够轻松地将示例清理为仅使用1个曲面。此示例还使用自定义Render Script内核进行处理,您不需要使用它。您可以轻松捕获ViewfinderProcessor.java中的缓冲区类型 Allocation ,以获取旧的Camera API中的字节数组。