【问题标题】:Only some specific display width works when using GraphicBuffer (EGL) in Android NDK在 Android NDK 中使用 GraphicBuffer (EGL) 时,只有某些特定的显示宽度有效
【发布时间】:2016-06-12 06:41:48
【问题描述】:

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

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

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

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

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

提前致谢。

【问题讨论】:

    标签: android opengl-es android-ndk egl


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢!你说的对。 GraphicBuffer中有一个getStride(),它告诉了渲染缓冲区的实际宽度。只需跳过每行尾部的填充,然后一切正常
    猜你喜欢
    • 2014-06-09
    • 2021-07-08
    • 1970-01-01
    • 1970-01-01
    • 2020-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-16
    相关资源
    最近更新 更多