OpenGL 使用 Shader 实现 RGBA 转 I420(附项目源码)

前面连续写过两篇 shader 实现 RGBA 转 YUV 的文章:

  • OpenGL 使用 shader 实现 RGBA 转 YUYV

关于 YUV 图像的相关知识这里也贴出来一些链接,供不熟悉的同学查阅。

  • 一文掌握 YUV 图像的基本处理

Shader 实现 RGBA 转 I420

I420 格式的图像在视频解码中比较常见,像前面文章中提到的,在工程中一般会选择使用 Shader 将 RGBA 转 YUV,这样再使用 glReadPixels 读取图像时可以有效降低传输数据量,提升性能,并且兼容性好。

所以,在读取 OpenGL 渲染结果时,先利用 Shader 将 RGBA 转 YUV 然后再进行读取,这种方式非常高效便捷。

例如 YUYV 格式相对 RGBA 数据量降为原来的 50% ,而采用 NV21 或者 I420 格式可以降低为原来的 37.5% 。

当然读取 OpenGL 渲染结果的方式还有很多种,要视具体的需求和使用场景而定,具体可以参考文章:OpenGL 渲染图像读取哪家强?

对 I420 格式比较熟悉的同学应该非常了解,I420 有 3 个平面(plane), 一个

你可能感兴趣的:(Android,OpenGLES,3.0,android,图形渲染,OpenGLES,着色器)