在android中加载位图的有效方法

时间:2013-07-19 12:47:59

标签: android memory bitmap

我正在尝试使用此代码将图片中的图片加载到位图中:

Bitmap myBitmap = Bitmap.createScaledBitmap(BitmapFactory.decodeFile(adress), (int)viewWidth/2, (int)viewHeight/2, false);

其中'地址'是图库中图片的地址。这在我的Galaxy Note 1,Android版本2.3.6上工作正常,但由于我的Galaxy 2,Android版本4.1.2上的“内存不足”导致崩溃

我在这里做错了吗?有没有办法获得缩放位图? 生成的位图(当它确实有效时)由于缩放而有点污迹,但我不介意。 感谢!!!

2 个答案:

答案 0 :(得分:2)

使用此方法

    Bitmap bm=decodeSampledBitmapFromPath(src, reqWidth, reqHeight);

实施 -

     public int calculateInSampleSize(BitmapFactory.Options options,
        int reqWidth, int reqHeight) {

    final int height = options.outHeight;
    final int width = options.outWidth;
    int inSampleSize = 1;

    if (height > reqHeight || width > reqWidth) {
        if (width > height) {
            inSampleSize = Math.round((float) height / (float) reqHeight);
        } else {
            inSampleSize = Math.round((float) width / (float) reqWidth);
        }
    }
    return inSampleSize;
}

public Bitmap decodeSampledBitmapFromPath(String path, int reqWidth,
        int reqHeight) {

    final BitmapFactory.Options options = new BitmapFactory.Options();
    options.inJustDecodeBounds = true;
    BitmapFactory.decodeFile(path, options);

    options.inSampleSize = calculateInSampleSize(options, reqWidth,
            reqHeight);

    // Decode bitmap with inSampleSize set
    options.inJustDecodeBounds = false;
    Bitmap bmp = BitmapFactory.decodeFile(path, options);
    return bmp;
}

}

答案 1 :(得分:0)

this直接是您的答案 - 您需要先计算尺寸,然后以正确的尺寸获取图像