OpenGLRenderer: Bitmap too large to be uploaded into a texture 的原因简析

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/SCHOLAR_II/article/details/81701160

根本原因:

使用硬件加速沉浸,图片太大(生成对应的Bimmap size太大),生成GPU处理的纹理失败(不允许生成)

解决方案:

1.换张小size的图片(当图片是本杝的,用来当背景图这类)
2.使用第三方图片库,对图片使用缩压处理

View的渲染与OpenGLRenderer的关系

ImageView或其它View的子类的渲染是使用了android.graphics.Canvas

android.graphics.Canvas 是一个 2D 图形 API,而且是最受开发者群体青睐的图形 API。Canvas 运算可在 Android 中绘制所有原生和自定义 android.view.View。在 Android 中,Canvas API 通过一个名为 OpenGLRenderer 的绘制库实现硬件加速,该绘制库将 Canvas 运算转换为 OpenGL 运算,以便它们可以在 GPU 上执行。
从 Android 4.0 开始,硬件加速的 Canvas 默认情况下处于启用状态。因此,支持 OpenGL ES 2.0 的硬件 GPU 对于 Android 4.0 及更高版本的设备来说是强制要求

综上所示,如果图片太大,OpenGLRenderer把Bitmap转成textrue(纹理)会失败,从而对应的图片沉浸不出来。

注:可以简单做一下实验,当把APP的硬件加速关闭,使用纯软件渲染,图片就可以显示出来了

AndroidManifest.xml的<Application 节点,添加      android:hardwareAccelerated="false"即可,关闭硬件加速

参考资料

猜你喜欢

转载自blog.csdn.net/SCHOLAR_II/article/details/81701160
今日推荐