Android:通用图像加载器加载大图像

Android:通用图像加载器加载大图像,android,bitmap,universal-image-loader,Android,Bitmap,Universal Image Loader,我需要加载有2450 x 2450像素尺寸的大图像 Bitmap bitmap = ImageLoader.getInstance().loadImageSync(url, ImageConfig.getImageOptions()); int height = orientation == Configuration.ORIENTATION_PORTRAIT ? displaymetrics.heightPixels : displaymetrics.widt

我需要加载有2450 x 2450像素尺寸的大图像

Bitmap bitmap = ImageLoader.getInstance().loadImageSync(url,
        ImageConfig.getImageOptions());
int height = orientation == Configuration.ORIENTATION_PORTRAIT ?
        displaymetrics.heightPixels : displaymetrics.widthPixels;

Bitmap bitmap = ImageLoader.getInstance().loadImageSync(imageUri,
        new ImageSize(height, height), ImageConfig.getImageOptions());
问题是,在低端设备(RAM小于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();
}
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();
}
我尝试根据设备分辨率添加目标大小,但不起作用,加载的位图仍然有2450 x 2450像素的尺寸

Bitmap bitmap = ImageLoader.getInstance().loadImageSync(url,
        ImageConfig.getImageOptions());
int height = orientation == Configuration.ORIENTATION_PORTRAIT ?
        displaymetrics.heightPixels : displaymetrics.widthPixels;

Bitmap bitmap = ImageLoader.getInstance().loadImageSync(imageUri,
        new ImageSize(height, height), ImageConfig.getImageOptions());
我尝试将imageScaleType更改为
imageScaleType。准确地说
,加载的位图大小调整为1225 x 1225像素,在所有设备上,我需要获取高端设备的原始尺寸,以及低端设备的尺寸

主要问题是目标尺寸不起作用


知道我应该如何加载映像吗,尤其是对于低端设备?

尝试使用类似的库

它真的很容易使用,它为您管理调整大小


如果你想自己做这件事,我建议用C++中的NDK来做,因为你有更好的内存管理,可以帮助你使用低端设备。

< P>简单地将IsCaseType改为<代码> IMAGEASETYPE。目标尺寸将按预期工作。Stangely UIL将根据目标宽度和目标高度之间的最大值,尝试保持纵横比

显示图像选项

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();
}
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());

为什么不使用缓存?因为它不是必需的,即使在使用缓存时,低端设备上仍然出现内存不足异常加载时调整图像大小。相当标准。这就是我想做的,但目标尺寸并不像预期的那样有效