在 Android NDK 中使用 GraphicBuffer (EGL) 时只有一些特定的显示宽度有效

Only some specific display width works when using GraphicBuffer (EGL) in Android NDK

我正在尝试用 EGL 替换 glReadPixels() 以使其更快。

参考this post,我已经成功地在我的项目中使用它。我的代码和post.

差不多

不过奇怪的是——宽度必须是一些特定的像素,比如384、640、720、1280等,如果我设置的宽度不是其中,图像实际上以其他宽度呈现,因此如果显示 cv::Mat 等会失真

看起来Android系统对EGLImage的宽度做了一些限制。遗憾的是我不熟悉 Android 开发...

这是怎么发生的?如何解决?

提前致谢。

一般来说,通过 gralloc 分配的系统图形缓冲区是不可移植的; gralloc 分配旨在处理许多特定于系统的问题,例如使用最佳内存布局以供视频/图形/显示子系统有效使用。在某些情况下,您甚至可以获得真正的侵入性效果,例如帧缓冲区压缩。

如果我不得不猜测,这听起来像是您在阅读应用程序中的图像时没有考虑表面行步幅。