Android 以良好的质量和内存效率从资源中缩小位图
我想缩小500x500px资源的比例,使其始终适合由屏幕宽度决定的特定大小Android 以良好的质量和内存效率从资源中缩小位图,android,resources,bitmap,scale,Android,Resources,Bitmap,Scale,我想缩小500x500px资源的比例,使其始终适合由屏幕宽度决定的特定大小 目前我使用的代码来自Android开发者网站(),但质量不如我在ImageView(作为xml源代码)中使用500x500px资源,只是缩放ImageView,而不是位图 但是它很慢,我想缩放位图,以提高内存效率和速度 编辑:我想要缩放的可绘制文件位于我的应用程序的drawable文件夹中 编辑2:我目前的方法 左图为未经任何修改的方法。中心映像是使用@Salman Zaidi提供的方法完成的,只需稍加修改:o.inP
目前我使用的代码来自Android开发者网站(),但质量不如我在
ImageView
(作为xml源代码)中使用500x500px资源,只是缩放ImageView
,而不是位图
但是它很慢,我想缩放位图
,以提高内存效率和速度
编辑:我想要缩放的可绘制文件位于我的应用程序的drawable
文件夹中
编辑2:我目前的方法
左图为未经任何修改的方法。中心映像是使用@Salman Zaidi提供的方法完成的,只需稍加修改:o.inPreferredConfig=Config.argb8888代码>和o2.inPreferredConfig=Config.ARGB_8888代码>
右边的图像是一个imageview,其中图像源是用xml定义的,我希望通过缩放位图达到的质量
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”是新宽度(如果图像处于纵向模式)或新高度(如果图像处于横向模式)。您可以设置自己选择的值。。缩放位图不会占用太多内存空间。检查此培训:
它展示了如何有效地调整位图的大小,inSampleSize参数用于内存优化,同时从资源或内存加载位图。因此,对于您的问题,您应该使用以下内容:
Bitmap bmp = BitmapFactory.decode...;
bmp = bmp.createScaledBitmap(bmp, 400, 400, false);
inSampleSizelets允许您使用描述步骤缩放位图。比例比为2、4,依此类推。因此,当您使用选项解码时,其中inSampleSize=2从内存加载一个250x250位图,然后将其拉伸到400x400看起来与我的解决方案类似。另外,我没有文件,我有一个drawable(在R.drawable.xxx中)。。如果您有drawable,那么我建议您将图像保存为sd卡上的文件,然后调整大小。。您无法获取可绘制文件夹和项目的路径。我已经在培训中使用了上述代码。在我看来,它并不完美,它仍然有点模糊。@Leandros我想你会发现这是一个非常好的资源来通读。如果正确使用API,可以根据需要缩放位图。并根据您的需要进行修改(以保持给定区域的最大质量)@doomsnight我读过了。也许我只是不明白如何达到更高的质量。你能帮我吗?没错,这是一个例子,但只要使用得当,你可以将位图缩放到你想要的大小。我用它来调整位图的大小,使之成为缩略图,并且它节省了大量的内存,比如更大的RGB类型ARGB_8888