如何在Android中高质量地缩放位图并且不会崩溃

时间:2011-10-06 02:11:35

标签: android bitmap scaling

我正在使用url下载图像,但是在缩放之后它的崩溃和缩放是不正确的。 这是我用过的代码,

//Code to fetch bitmap  
Bitmap bmp=HttpFetch.fetchBitmap(imageUrl);

//Scale bitmap

Bitmap myBitmap = getResizedBitmap(bmp, viewWidth, viewHeight);  

public static Bitmap getResizedBitmap(Bitmap bm, int newWidth, int newHeight) {

        BitmapFactory.Options options = new BitmapFactory.Options();
        options.inJustDecodeBounds = true;

        int srcWidth = bm.getWidth();
        int srcHeight = bm.getHeight();

        int desiredWidth = newWidth;
        int desiredHeight = newHeight;

        int inSampleSize = 1;
        while(srcWidth / 2 > desiredWidth){
            srcWidth /= 2;
            srcHeight /= 2;
            inSampleSize *= 2;
        }

        float desiredWidthScale = (float) desiredWidth / srcWidth;
        float desiredHeightScale = (float) desiredHeight / srcHeight;

        // Decode with inSampleSize
        options.inJustDecodeBounds = false;
        options.inDither = false;
        options.inSampleSize = inSampleSize;
        options.inScaled = false;
        options.inPreferredConfig = Bitmap.Config.ARGB_8888;

        Matrix matrix = new Matrix();
        matrix.postScale(desiredWidthScale, desiredHeightScale);
        original = Bitmap.createBitmap(bm, 0, 0, bm.getWidth(), bm.getHeight(), matrix, true);
        return original;
}

找不到使用位图获取BitmapFactory.Option的代码,以及使用文件名的大多数地方,是否可以使用位图获取BitmapFactory.Options?

请从网络下载时建议更好的扩展位图解决方案。

1 个答案:

答案 0 :(得分:1)

original = Bitmap.createBitmap(bm, 0, 0, bm.getWidth(), bm.getHeight(), matrix, true);

此行在调用getResizedBitmap()后返回不可变的位图,如果您尝试修改此位图,则可能会导致崩溃。

Android#createBitmap()

请查看LogCat了解详情。