我想缩小一个500x500px的资源,以适应特定的尺寸,这是由屏幕的宽度决定的。
目前我使用的是安卓开发者站点(Loading Large Bitmaps Efficiently)的代码,但质量不如我在ImageView中使用500x500px的资源(作为xml中的源代码),只缩放ImageView而不是位图。
但它很慢,而且我也想扩展Bitmap,以提高内存效率和速度。
编辑:我想缩放的可绘制文件在我的应用程序的drawable文件夹中。
Edit2:我目前的方法。

左边的图像是来自Loading Large Bitmaps Efficiently的方法,没有任何修改。中心图像是用@Salman Zaidi提供的方法完成的,只做了一点修改:o.inPreferredConfig = Config.ARGB_8888;和o2.inPreferredConfig = Config.ARGB_8888;
右边的图像是一个图像视图,其中的图像源是用xml定义的,我想要达到的质量是一个缩放的位图。
发布于 2013-01-08 00:22:13
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‘是新的宽度(如果图像处于纵向模式)或新高度(如果图像处于横向模式)。您可以设置自己选择的值。缩放后的位图不会占用太多内存空间。
发布于 2014-03-04 00:11:28
伙计们,inSampleSize参数是为内存优化而设计的,同时从资源或内存中加载位图。因此,对于您的问题,您应该使用以下内容:
Bitmap bmp = BitmapFactory.decode...;
bmp = bmp.createScaledBitmap(bmp, 400, 400, false);inSampleSizelets允许你使用分解步骤来缩放位图。缩放比为2、4等等。因此,在使用带选项的解码时,inSampleSize=2需要从内存加载一个250x250的位图,然后将其扩展到400x400
发布于 2013-01-08 00:47:39
查看此培训:
http://developer.android.com/training/displaying-bitmaps/load-bitmap.html
它展示了如何有效地调整位图大小。
https://stackoverflow.com/questions/14199671
复制相似问题