我想缩小500x500px资源以适应始终由屏幕宽度决定的特定大小。
目前我使用Android开发者网站(Loading Large Bitmaps Efficiently)中的代码,但质量不如我在ImageView
中使用500x500px资源(作为xml中的源代码)那么好缩放ImageView
而不是位图。
但它很慢,我也想扩展Bitmap
,以提高内存效率。
编辑:我想缩放的drawable在我的应用程序的drawable
文件夹中。
Edit2:我目前的方法。
左图是来自Loading Large Bitmaps Efficiently的方法,没有任何修改。中心图像由@Salman Zaidi提供的方法完成,只需稍加修改:o.inPreferredConfig = Config.ARGB_8888;
和o2.inPreferredConfig = Config.ARGB_8888;
右图是一个图像视图,其中图像源以xml定义,并且我想用缩放的位图来达到质量。
答案 0 :(得分:6)
private Bitmap decodeImage(File f) {
Bitmap b = null;
try {
BitmapFactory.Options o = new BitmapFactory.Options();
o.inJustDecodeBounds = true;
FileInputStream fis = new FileInputStream(f);
BitmapFactory.decodeStream(fis, null, o);
fis.close();
float sc = 0.0f;
int scale = 1;
//if image height is greater than width
if (o.outHeight > o.outWidth) {
sc = o.outHeight / 400;
scale = Math.round(sc);
}
//if image width is greater than height
else {
sc = o.outWidth / 400;
scale = Math.round(sc);
}
// Decode with inSampleSize
BitmapFactory.Options o2 = new BitmapFactory.Options();
o2.inSampleSize = scale;
fis = new FileInputStream(f);
b = BitmapFactory.decodeStream(fis, null, o2);
fis.close();
} catch (IOException e) {
}
return b;
}
此处'400'是新宽度(如果图像处于纵向模式)或新高度(如果图像处于横向模式)。您可以设置自己选择的值。缩放位图不会占用太多内存空间..
答案 1 :(得分:3)
Dudes, inSampleSize param用于内存优化,同时从资源或内存加载位图。因此,对于您的问题,您应该使用此:
Bitmap bmp = BitmapFactory.decode...;
bmp = bmp.createScaledBitmap(bmp, 400, 400, false);
inSampleSizelets 可让您使用descret步骤缩放位图。比例比为2,4,依此类推。因此,当您使用选项解码时, inSampleSize = 2 ,您从内存加载250x250位图,然后将其拉伸到400x400
答案 2 :(得分:0)