在Android ImageView中加载高度过大的位图

时间:2019-04-04 07:22:50

标签: android picasso android-glide android-bitmap universal-image-loader

我在位图方面遇到了一个奇怪的问题,我在应用程序中本地存储了一些图像,这些图像的高度过大,并且我在imageview中显示了这些图像,这些图像支持缩放和平移。我正在做的是使用通用图像加载器获取图像的位图,然后将该位图加载到imageview中。现在,如果我按原样显示位图,而无需使用:

DisplayImageOptions opts = new 
DisplayImageOptions.Builder().imageScaleType(ImageScaleType.NONE).build();
bitmap = ImageLoader.getInstance().loadImageSync(uri.toString(), opts);

然后imageview中什么也没有显示,但是我在logcat中遇到了错误:

  

W / OpenGLRenderer:位图太大,无法上传到纹理中   (686x7628,max = 4096x4096)

,如果我尝试按比例加载图像,则图像质量会被破坏,因为图像仅包含文本,因此不可读。

设备的屏幕截图:

enter image description here

原始图片:

enter image description here

图像大小仅为1.2Mb,我不知道该如何处理,因为我尝试了所有库来将图像质量降低为不可读的格式,并且如果我尝试将图像位图直接加载到imageview它没有显示。感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

您可以使用来获得设备支持的最大尺寸

 val canvas = Canvas()
    canvas.getMaximumBitmapHeight()
    canvas.getMaximumBitmapWidth()

根据文档

高度

/**
 * Returns the maximum allowed height for bitmaps drawn with this canvas.
 * Attempting to draw with a bitmap taller than this value will result
 * in an error.
 *
 * @see #getMaximumBitmapWidth()
 */
public int getMaximumBitmapHeight() {
    return MAXMIMUM_BITMAP_SIZE;
}

宽度

 /**
 * Returns the maximum allowed width for bitmaps drawn with this canvas.
 * Attempting to draw with a bitmap wider than this value will result
 * in an error.
 *
 * @see #getMaximumBitmapHeight()
 */
public int getMaximumBitmapWidth() {
    return MAXMIMUM_BITMAP_SIZE;
}

因此,在设置Bitmap时,应考虑这些尺寸并相应地设置位图。

答案 1 :(得分:0)

好吧,我认为图像加载库对此类图像没有帮助。库应缩放原始图像,以减少最大纹理大小。因此,那些长图像被大规模缩放,导致无法读取的文本。在您的情况下,您应该自己处理图像加载:获取图像并将其绘制在画布上,也许是按部分或以某种方式进行。

无论如何,以这种大小的图像加载文本看起来不是一个好主意:)