当前位置:   article > 正文

Camera_android如何取出hardwarebuffer中的数据

android如何取出hardwarebuffer中的数据

RGBA生成Bitmap的优化

最近研究在Android平台上使用Camera2API+OpenGLES进行预览并拍照的实现方案,遇到一个比较棘手的问题。对于Camera2使用OpenGLES进行预览显示没有问题,预览算法(如滤镜等)使用shader编写即可,但是当拍照的图片如何应用这个算法呢?
一般设置的预览尺寸是1080x1920,但是拍照尺寸是4000x3000,并且拍照的单帧数据也需要应用算法。我这里采用的方案是使用OES的纹理进行渲染预览。

1.创建YUV420_888格式的ImageReader,用来接收预览帧。
2.收到预览帧后,使用Image.getHardwareBuffer将该拍照帧转换成纹理glEGLImageTargetTexture2DOES
3.使用OpenGLES对该纹理进行算法处理
4.创建PixelForma.RGBA的ImageReader,并getSurface创建EGL,作为上述预览算法处理的surface.
5.算法完成后,调用swapbuffer可以在onFrameAvailable中收到RGBA格式的结果。
6.使用Image.getHardwareBuffer获取RGBA的数据,并在Native层生成bitmap对象,对于4000x3000的图片性能提升一倍。

方案一

JNIEXPORT jint JNICALL
Java_com_test_nativeTransformHardwareBuffer2Bitmap(JNIEnv *env, jclass clazz,
                                                                  jobject hardwareBuffer,
                       
  • 1
  • 2
  • 3
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/article/detail/46083
推荐阅读
相关标签
  

闽ICP备14008679号