相当简单的问题,无法找到答案..
我想知道即使ImageView显示原始图像的较小版本 - 它是否仍然使用原始图像的完整内存大小...? (我指的是从SD卡加载而不是从资源加载的图像)
答案 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;
}
您还应该考虑: