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

时间:2016-06-12 06:41:48

标签: android opengl-es android-ndk egl

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

参考this post,我已成功使其在我的项目中有效。我的代码与那篇文章几乎相同。

然而,奇怪的是 - 宽度必须是一些特定的像素,例如,384,640, 720, 1280等。如果我设置的宽度不在这些中,图像实际上是在这些中以其他宽度呈现,因此如果用cv :: Mat等显示则会失真

看起来Android系统对EGLImage的宽度有一些限制。可悲的是,我不熟悉Android开发......

这是怎么回事?如何解决?

提前致谢。

1 个答案:

答案 0 :(得分:0)

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

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