Android - ImageView是否调整图像大小(并且不保存原始图像)?

时间:2015-07-21 02:04:56

标签: android image memory resize imageview

相当简单的问题,无法找到答案..

我想知道即使ImageView显示原始图像的较小版本 - 它是否仍然使用原始图像的完整内存大小...? (我指的是从SD卡加载而不是从资源加载的图像)

1 个答案:

答案 0 :(得分:1)

是的,它会使用原始尺寸。您必须先调整所有位图的大小,然后再分配给ImageView,否则您将遇到很多内存不足错误的问题。

您还应该计算ImageView的最终大小并调整位图大小。

一些代码可以帮助你。

private static Bitmap createBitmap(@NonNull String filePath, int width )
{
    BitmapFactory.Options options = new BitmapFactory.Options();

    options.inJustDecodeBounds = true;
    BitmapFactory.decodeFile(filePath , options );

    // Getting original image properties
    int imageHeight = options.outHeight;
    int imageWidth = options.outWidth;


    int scale       = -1;
    if ( imageWidth < imageHeight ) {
        scale   = Math.round( imageHeight / width );
    } else {
        scale   = Math.round(imageWidth / width);
    }
    if ( scale <= 0 )
        scale = 1;

    options.inSampleSize    = scale;
    options.inJustDecodeBounds  = false;

    // Create a resized bitmap
    Bitmap scaledBitmap = BitmapFactory.decodeFile(filePath , options);
    return scaledBitmap;
}

您还应该考虑:

  • 维护主线程之外的所有位图操作。
  • 正确处理并发
  • 使用一些开源库,例如one