检测Android Lollipop上的分辨率是否过高

时间:2014-11-19 20:26:07

标签: android image-processing android-imageview android-image android-5.0-lollipop

我必须在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);
}

其中宽度和高度由图片来源提供。

但现在我的Nexus 4运行Lollipop和我的模拟器,maxSize [0]始终为0。 那么,我该如何检测这个问题呢?

2 个答案:

答案 0 :(得分:1)

从技术上讲,您只能保证能够呈现屏幕大小或更小的单个位图。您可能能够在某些硬件上渲染更大的硬件,但这是不可预测的 - 正如我所说,唯一的实际保证是您将能够渲染大小与屏幕相同的尺寸(或更小)。

要显示更大的图像,请将您的用户界面分成多个图块,每个图块都不大于任一维度的屏幕。

答案 1 :(得分:1)

该GL查询需要线程上的活动GL上下文。以前,您的应用程序意外使用框架的私有GL上下文来执行该查询。在Lollipop中,由于各种架构更改,此上下文不再泄漏到应用程序代码中,因此查询现在失败的原因。如果你查看logcat,你可能会看到类似的东西:“调用没有当前上下文的opengl es api”。

如果需要,您可以创建自己的GL上下文来执行该查询。或者,您可以假设屏幕分辨率是最大值,或者使用可扩展的解决方案,例如平铺方法。