在没有内存不足的情况下获取位图原始大小

时间:2015-06-11 08:48:12

标签: android bitmap

这是经典问题,但我没有找到答案。我在我的项目中使用位图。应用过滤器,裁剪..问题是内存不足。我需要在ram上保留许多位图(大约20-30位图)。

我使用此方法在图库中连续获取图像,但它不是原始尺寸。

 public static Bitmap getImageWithoutOutOfMemory(String filePath,int requiredSize) {
    // Decode image size
    BitmapFactory.Options o = new BitmapFactory.Options();
    o.inJustDecodeBounds = true;
    o.inMutable = true;
    o.inPreferredConfig = Bitmap.Config.ARGB_8888;
    BitmapFactory.decodeFile(filePath, o);

    // The new size we want to scale to
    final int REQUIRED_SIZE = requiredSize;

    // Find the correct scale value. It should be the power of 2.
    int width_tmp = o.outWidth, height_tmp = o.outHeight;
    int scale = 1;
    while (true)
    {
        if (width_tmp < REQUIRED_SIZE && height_tmp < REQUIRED_SIZE)
            break;
        width_tmp /= 2;
        height_tmp /= 2;
        scale *= 2;
    }

    // Decode with inSampleSize
    BitmapFactory.Options o2 = new BitmapFactory.Options();
    o2.inSampleSize = scale;
    Bitmap img = BitmapFactory.decodeFile(filePath, o2);
    return img;
}

那么如何在没有内存异常的情况下获得原始图像。

2 个答案:

答案 0 :(得分:0)

当前形式的函数选择的大小可确保图像缩放到严格小于所需大小。 在租约变更时:

if (width_tmp < REQUIRED_SIZE && height_tmp < REQUIRED_SIZE) break;

if (width_tmp <= REQUIRED_SIZE && height_tmp <= REQUIRED_SIZE) break;

如果图像自然是&#39;如果需要大小,它实际上会返回一半大小。

如果还有其他问题,请发布MVCE。

答案 1 :(得分:0)

您可以尝试使用decodeSampledBitmapFromResource method

调整位图大小