使用通用映像加载器加载后调整位图大小

时间:2014-06-24 20:21:12

标签: android bitmap universal-image-loader

我正在使用Universal Image Loader加载图像,我想缩放它以使宽度为屏幕宽度并相应地缩放高度,这意味着在加载图像之前我知道宽度我想要,但不是高度。因此,当我加载图像时,我想获得图像的高度和宽度,并根据屏幕的宽度使用它来缩放图像。我用来做这个的代码就是:

try {
    display.getSize(size);
    scaledWidth = size.x;
} catch (java.lang.NoSuchMethodError ignore) {
    scaledWidth = display.getWidth();
}

String filePath = "file://" + getBaseContext().getFilesDir().getPath().toString() + "/" + imagePath + ".png";
Bitmap bitmap = imageLoader.loadImageSync(filePath);
int height = bitmap.getHeight();
int width = bitmap.getWidth();
scaledHeight =  (int) (((scaledWidth * 1.0) / width) * height);
//Code to resize Bitmap using scaledWidth and scaledHeight

使用通用图像加载器调整位图大小的最佳方法是什么,甚至更好,有没有一种方法可以只指定宽度,并根据比例正确缩放位图?

4 个答案:

答案 0 :(得分:9)

你自己不需要这样做。考虑使用ImageScaleType.EXACTLY

new DisplayImageOptions.Builder().imageScaleType(ImageScaleType.EXACTLY)

https://github.com/nostra13/Android-Universal-Image-Loader/blob/master/library/src/com/nostra13/universalimageloader/core/assist/ImageScaleType.java

答案 1 :(得分:2)

使用可以使用

// Load image, decode it to Bitmap and return Bitmap to callback
ImageSize targetSize = new ImageSize(120, 80); // result Bitmap will be fit to this size
imageLoader.loadImage(imageUri, targetSize, displayOptions, new SimpleImageLoadingListener() {
    @Override
    public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
        // Do whatever you want with Bitmap
    }
});

答案 2 :(得分:0)

我还没有阅读你的代码,但确定高度的计算非常简单。我们想要的是保持图像的纵横比不变。所以首先计算aspect_ratio即

imageHeight/imageWidth = aspt_ratio;

然后取这个aspect_ratio并将其与当前屏幕宽度相乘以获得高度。

scaledHeight = aspt_ratio*screen_width;

因为我们知道根据您的要求,图像的缩放宽度将始终等于屏幕宽度。

答案 3 :(得分:0)

这将在您需要时使用

scaledWidth = size.x;

String filePath = "file://" + getBaseContext().getFilesDir().getPath().toString() + "/" + imagePath + ".png";

    android.graphics.BitmapFactory.Options options= new Options();
        options.inJustDecodeBounds=true;
 //Just gets image size without allocating memory
BitmapFactory.decodeFile(filePath, options);


int height = options.outHeight;
int width = bitmap.outWidth;
scaledHeight =  (int) (((scaledWidth * 1.0) / width) * height);


ImageSize targetSize = new ImageSize(scaledWidth, scaledHeight); 
Bitmap bmp = imageLoader.loadImageSync(imageUri, targetSize, displayOptions);