我正在从磁盘读取图像并将其显示在 ListView
的一行内。图像文件大于行的 ImageView
中需要显示的文件。由于我需要将 位图
缓存在 RAM 中以加快访问速度,因此我希望它们仅与 ImageView
一样大(85x85 dip)
现在我正在阅读文件
bitmap = BitmapFactory.decodeFile(file);
ImageView负责缩放和裁剪
android:scaleType="centerCrop"
据我所知,这是将整个位图保存在内存中(因为我将其缓存 XD),这很糟糕
我怎样才能从 ImageView 中删除这个责任并在加载文件时进行裁剪 + 缩放?所有位图都将以 85x85 倾角显示,需要“centerCrop”
最佳答案
您可以在加载、裁剪和缩放之前找出图片的尺寸:
BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
Bitmap bmo = BitmapFactory.decodeFile(file.getAbsolutePath(), options);
然后以样本大小加载它:
...
options.inSampleSize = 1/2;
bmo = BitmapFactory.decodeFile(file.getAbsolutePath(), options);
...
= Bitmap.createScaledBitmap(bmo, dW, dH, false);
不要忘记回收临时位图,否则你会得到 OOME。
bmo.recycle();
关于java - 在 Android 中裁剪和调整图像大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4579499/