首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从资源缩容位图,质量好,内存效率高

从资源缩容位图,质量好,内存效率高
EN

Stack Overflow用户
提问于 2013-01-08 00:10:29
回答 3查看 8.5K关注 0票数 3

我想缩小一个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定义的,我想要达到的质量是一个缩放的位图。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-01-08 00:22:13

代码语言:javascript
复制
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‘是新的宽度(如果图像处于纵向模式)或新高度(如果图像处于横向模式)。您可以设置自己选择的值。缩放后的位图不会占用太多内存空间。

票数 6
EN

Stack Overflow用户

发布于 2014-03-04 00:11:28

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

代码语言:javascript
复制
Bitmap bmp = BitmapFactory.decode...;
bmp = bmp.createScaledBitmap(bmp, 400, 400, false);

inSampleSizelets允许你使用分解步骤来缩放位图。缩放比为2、4等等。因此,在使用带选项的解码时,inSampleSize=2需要从内存加载一个250x250的位图,然后将其扩展到400x400

票数 3
EN

Stack Overflow用户

发布于 2013-01-08 00:47:39

查看此培训:

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14199671

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档