我在位图方面遇到了一个奇怪的问题,我在应用程序中本地存储了一些图像,这些图像的高度过大,并且我在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)
,如果我尝试按比例加载图像,则图像质量会被破坏,因为图像仅包含文本,因此不可读。
设备的屏幕截图:
原始图片:
图像大小仅为1.2Mb,我不知道该如何处理,因为我尝试了所有库来将图像质量降低为不可读的格式,并且如果我尝试将图像位图直接加载到imageview
它没有显示。感谢您的帮助。
答案 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)
好吧,我认为图像加载库对此类图像没有帮助。库应缩放原始图像,以减少最大纹理大小。因此,那些长图像被大规模缩放,导致无法读取的文本。在您的情况下,您应该自己处理图像加载:获取图像并将其绘制在画布上,也许是按部分或以某种方式进行。
无论如何,以这种大小的图像加载文本看起来不是一个好主意:)