rcm*_*lli 6 android android-camera
新的Camera 2 API与旧的相比非常不同.显示操纵的相机帧到管道的用户部分让我感到困惑.我知道使用Android L和Camera2 API对相机预览图像数据处理有很好的解释,但显示帧仍然不清楚.我的问题是,在一些处理过程中,在ImageReaders回调函数中显示帧的方式是什么,同时保持Camera2 api管道的效率和速度?
示例流程:
camera.add_target(imagereader.getsurface) - >关于imagereaders回调做一些处理 - >(在屏幕上显示已处理的图像?)
解决方法创意:每次处理新帧时,都会将位图发送到imageview.
Edd*_*ala 15
澄清问题后编辑; 最初的答案在底部
取决于您在哪里进行处理.
如果您正在使用RenderScript,则可以将Surface从SurfaceView或TextureView连接到Allocation(使用setSurface),然后将处理后的输出写入该Allocation并使用Allocation.ioSend()将其发送出去.该HDR取景器的演示使用了这种方法.
如果您正在进行基于EGL着色器的处理,则可以使用eglCreateWindowSurface将Surface连接到EGLSurface,将Surface作为native_window参数.然后,您可以将最终输出渲染到该EGLSurface,当您调用eglSwapBuffers时,缓冲区将被发送到屏幕.
如果您正在进行本机处理,则可以使用NDK ANativeWindow方法写入从Java传递的Surface并转换为ANativeWindow.
如果你正在进行Java级处理,那真的很慢而且你可能不想这样做.但是可以使用新的Android M ImageWriter类,或者每帧都将纹理上传到EGL.
或者如您所说,每帧都绘制一个ImageView,但这样会很慢.
原始答案:
如果要捕获JPEG图像,只需将ByteBuffer的内容复制Image.getPlanes()[0].getBuffer()到a中byte[],然后使用BitmapFactory.decodeByteArray它将其转换为Bitmap.
如果您正在捕获YUV_420_888图像,那么您需要将自己的转换代码从3平面YCbCr 4:2:0格式写入您可以显示的内容,例如RGB []的RGB值来创建位图; 遗憾的是,还没有一个方便的API.
如果您正在捕获RAW_SENSOR图像(拜耳模式未处理的传感器数据),那么您需要进行大量图像处理或只需保存DNG.
| 归档时间: |
|
| 查看次数: |
9005 次 |
| 最近记录: |