Camera

本文探讨了在Android平台上使用Camera2 API和OpenGLES进行预览和拍照时,如何优化从YUV420_888格式到RGBA Bitmap的转换过程。通过使用ImageReader和纹理渲染,实现了对拍照帧的滤镜应用,并在Native层高效生成Bitmap。文章对比了两种不同的优化方案在Pixel4设备上的效果。
摘要由CSDN通过智能技术生成

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,
                       
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值