3

我想缩小 500x500px 资源以始终适应由屏幕宽度确定的特定大小。

目前我使用来自 Android 开发者网站的代码(有效地加载大型位图),但质量不如我在 a 中使用 500x500px 资源ImageView(作为 xml 中的源)并且只是缩放ImageView而不是位图。

但它很慢,我也想扩展Bitmap,以提高内存效率和速度。

编辑:我想缩放的drawable在drawable我的应用程序的文件夹中。

Edit2:我目前的方法。

在此处输入图像描述

左图是来自Loading Large Bitmaps Efficiently的方法,无需任何修改。中心图像是使用@Salman Zaidi 提供的方法完成的,稍作修改:o.inPreferredConfig = Config.ARGB_8888;o2.inPreferredConfig = Config.ARGB_8888;

正确的图像是一个图像视图,其中图像源在 xml 中定义,并且我想通过缩放位图达到的质量。

4

3 回答 3

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”是新的宽度(如果图像是纵向模式)或新的高度(如果图像是横向模式)。您可以设置自己选择的值.. 缩放位图不会占用太多内存空间..

于 2013-01-07T16:22:13.053 回答
3

伙计们,inSampleSize参数是为内存优化而设计的,同时从资源或内存中加载位图。所以对于你的问题,你应该使用这个:

Bitmap bmp = BitmapFactory.decode...;
bmp = bmp.createScaledBitmap(bmp, 400, 400, false);

inSampleSizelets让您可以使用离散的步骤来缩放位图。比例为 2,4,依此类推。因此,当您使用带有选项的解码时,inSampleSize=2您从内存中加载 250x250 位图,然后将其拉伸到 400x400

于 2014-03-03T16:11:28.253 回答
0

检查此培训:

http://developer.android.com/training/displaying-bitmaps/load-bitmap.html

它展示了如何有效地调整位图大小

于 2013-01-07T16:47:39.013 回答