Android Camera2 API显示已处理的预览图像

前端之家收集整理的这篇文章主要介绍了Android Camera2 API显示已处理的预览图像前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
新的Camera 2 API与旧的相比非常不同.显示操纵的相机帧到管道的用户部分让我感到困惑.我知道 Camera preview image data processing with Android L and Camera2 API有很好的解释,但显示帧仍然不清楚.我的问题是,在一些处理过程中,在ImageReaders回调函数显示帧的方式是什么,同时保持Camera2 api管道的效率和速度?

示例流程:

camera.add_target(imagereader.getsurface) – >在图像读取器上回调做一些处理 – > (在屏幕上显示已处理的图像?)

解决方法创意:每次处理新帧时,都会将位图发送到imageview.

解决方法

澄清问题后编辑;最初的答案在底部

取决于您在哪里进行处理.

如果您正在使用RenderScript,则可以将Surface从SurfaceView或TextureView连接到分配(使用setSurface),然后将处理后的输出写入该分配并使用Allocation.ioSend()将其发送出去. HDR Viewfinder demo使用这种方法.

如果您正在进行基于EGL着色器的处理,则可以使用eglCreateWindowSurface将Surface连接到EGLSurface,将Surface作为native_window参数.然后,您可以将最终输出渲染到该EGLSurface,当您调用eglSwapBuffers时,缓冲区将被发送到屏幕.

如果您正在进行本机处理,则可以使用NDK ANativeWindow methods写入从Java和convert传递到ANativeWindow的Surface.

如果你正在进行Java级处理,那真的很慢而且你可能不想这样做.但是可以使用新的Android M ImageWriter类,或者每帧上传一个纹理到EGL.

或者如您所说,每帧都绘制一个ImageView,但这样会很慢.

原始答案:

如果要捕获JPEG图像,只需将ByteBuffer的内容从Image.getPlanes()[0] .getBuffer()复制到byte []中,然后使用BitmapFactory.decodeByteArray将其转换为Bitmap.

如果您正在捕获YUV_420_888图像,那么您需要将自己的转换代码从3平面YCbCr 4:2:0格式写入您可以显示内容,例如RGB []的RGB值来创建位图;遗憾的是,还没有一个方便的API.

如果您正在捕获RAW_SENSOR图像(拜耳模式未处理的传感器数据),那么您需要进行大量图像处理或只需保存DNG.

猜你在找的Android相关文章