之前写过一篇 OpenGL 使用 shader 实现 RGBA 转 YUYV 的文章,有几位读者大人在后台建议写一篇 shader 实现 RGBA 转 NV21 的文章,因为在实践中 NV21 格式用的比较多,于是我今天把这篇文章放出来。
关于 YUV 图像的知识和看图工具,可以参考下面的推送,本文不再赘述。
Shader 实现 RGBA 转 NV21 好处
OpenGL 完成图像的渲染后,很多情况下需要将渲染后的图像读取到内存进行下一步处理,这个时候使用 glReadPixels 直接读高分辨率的图像(RGBA)往往会带来性能问题,特别是在视频处理或相机预览场景中。
这个时候你可能会考虑使用 PBO、 HardwareBuffer、 ImageReader 等方式,参考 OpenGL 图像读取哪家强? 一文。
上面几种方式虽然能在一定程度上解决大图读取的性能问题,但又带来了实现复杂度高和兼容性等问题,比如 HardwareBuffer 需要 Android 26 以上版本等。
<
本文介绍了如何使用 OpenGL 的 Shader 实现 RGBA 图像到 NV21 格式的转换,以解决高分辨率图像读取的性能问题。详细探讨了 Shader 转换的原理,包括 NV21 的图像结构、纹理坐标和视口设置,并提供了关键代码示例。
订阅专栏 解锁全文
3万+

被折叠的 条评论
为什么被折叠?



