我需要加载尺寸为2450 x 2450像素的大图片。
Bitmap bitmap = ImageLoader.getInstance().loadImageSync(url,
ImageConfig.getImageOptions());
问题是,在低端设备(内存小于1 GB的手机)上,内存不足异常。
这是我的DisplayImageOptions
public static DisplayImageOptions getImageOptions() {
DisplayImageOptions.Builder options = new DisplayImageOptions.Builder();
options.delayBeforeLoading(10)
//The reason I'm using ARGB_8888 because I need to load bitmap without losing it's quality
.bitmapConfig(Bitmap.Config.ARGB_8888)
.imageScaleType(ImageScaleType.NONE)
//I'm not using disk or memory cache
.cacheOnDisk(false)
.cacheInMemory(false);
return options.build();
}
我尝试根据设备分辨率添加目标尺寸,但它不起作用,加载的位图仍然有2450 x 2450像素尺寸。
int height = orientation == Configuration.ORIENTATION_PORTRAIT ?
displaymetrics.heightPixels : displaymetrics.widthPixels;
Bitmap bitmap = ImageLoader.getInstance().loadImageSync(imageUri,
new ImageSize(height, height), ImageConfig.getImageOptions());
我尝试将imageScaleType更改为ImageScaleType.EXACTLY
,加载的位图大小调整为1225 x 1225像素,在所有设备上,我需要获得高端设备的原始尺寸,并调整低端设备的尺寸。
主要问题是目标尺寸不起作用
任何想法我应该如何加载图像,特别是对于低端设备?
答案 0 :(得分:1)
答案 1 :(得分:1)
只需将imageScaleType更改为ImageScaleType.EXACTLY_STRETCHED
即可解决问题。目标大小将按预期工作。 Stangely UIL将尝试根据目标宽度和目标高度之间的最大值保持纵横比。
DisplayImageOptions
public static DisplayImageOptions getImageOptions() {
DisplayImageOptions.Builder options = new DisplayImageOptions.Builder();
options.delayBeforeLoading(10)
//The reason I'm using ARGB_8888 because I need to load bitmap without losing it's quality
.bitmapConfig(Bitmap.Config.ARGB_8888)
.imageScaleType(ImageScaleType.EXACTLY_STRETCHED)
//I'm not using disk or memory cache
.cacheOnDisk(false)
.cacheInMemory(false);
return options.build();
}
在加载位图时根据设备尺寸设置目标尺寸
//In this case the device I'm using for testing has 2392 pixels height
int height = orientation == Configuration.ORIENTATION_PORTRAIT ?
displaymetrics.heightPixels : displaymetrics.widthPixels;
//In this case the device I'm using for testing has 1440 pixels width
int width = orientation == Configuration.ORIENTATION_PORTRAIT ?
displaymetrics.widthPixels : displaymetrics.heightPixels;
//Loaded bitmap will has 2392 x 2392 pixels dimensions
Bitmap bitmap = ImageLoader.getInstance().loadImageSync(imageUri,
new ImageSize(width, height), ImageConfig.getImageOptions());