我必须在 ImageView 中显示一些图片。 其中一些可能分辨率太高,给我
W/OpenGLRenderer﹕ Bitmap too large to be uploaded into a texture (3744x5616, max=4096x4096)
我用这个方法来检测这种情况:
public boolean isResTooHigh() {
int[] maxSize = new int[1];
GLES10.glGetIntegerv(GL10.GL_MAX_TEXTURE_SIZE, maxSize, 0);
return (maxSize[0] < width) || (maxSize[0] < height);
}
图片的宽度和高度由图片来源提供。
但现在在我运行 Lollipop 的 Nexus 4 和我的模拟器上,maxSize[0] 始终为 0。 那么,我该如何检测这个问题呢?
最佳答案
该 GL 查询需要线程上的 Activity GL 上下文。以前,您的应用程序不小心使用了框架的私有(private) GL 上下文来执行该查询。在 Lollipop 中,由于各种体系结构的变化,此上下文不再泄漏到应用程序代码中,因此查询现在失败了。如果您查看 logcat,您可能会看到类似这样的内容:“在没有当前上下文的情况下调用 opengl es api”。
如果需要,您可以创建自己的 GL 上下文来执行该查询。或者,您可以假设屏幕分辨率是最大的,或者使用可扩展的解决方案,例如平铺方法。
关于android - 检测 Android Lollipop 上的分辨率是否过高,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27026332/