android图片二次采样

转载 2015年11月19日 11:53:49
由于移动设备的屏幕尺寸有限,即使将高分辨率图片的分辨率降低,也不会影响显示效果。那如何降低呢?就需要用到一个类,那就是BitmapFactory.options类,主要会用到这个类的inSampleSize、inJustDecodeBounds、outHeight、outWidth参数。
inSampleSize:缩放比例,这个参数需要是2的幂函数。
inJustDecodeBounds:如果设置这个参数为ture,就不会给图片分配内存空间,但是可以获取到图片的大小等属性。
outHeight:图片高,单位像素.
outWidth:图片宽,单位像素.

说完这个类后,我们说说步骤,首先我们可以通过设置一个Options的属性inJustDecodeBounds=true,然后使用BitmapFactory.decodeXXX方法,让options作为参数,这样,我们在不分配内存的情况下,可以通过options读取图片的大小,outWidth和outHeight。其次通过原始图片的大小和你需要图片的大小来计算出需要缩放的比例。最后通过缩放比例值作为options.inSampleSize的值,再次调用BitmapFactory.decodeXXX,在调用方法前一定要设置inJustDecodeBounds=false


public class MainActivity extends AppCompatActivity {

    private final int MAXPICWITH = 1000;
    private final int MAXPICHEIGHT = 1000;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);



        //ImageView imageView = (ImageView) findViewById(R.id.ivPic);
        ImageView imageViewSimple = (ImageView) findViewById(R.id.ivPic);
        //imageView.setImageResource(R.drawable.abc);

        //TODO 获取bitmap
        Bitmap bm = getBitMapFromRes();


        //TODO 给imageview设置图片
        imageViewSimple.setImageBitmap(bm);
    }

    /**
     * 获取图片,并进行压缩
     * @return
     */
    private Bitmap getBitMapFromRes() {
        int sampleSize = 1;

        BitmapFactory.Options options = new BitmapFactory.Options();
        options.inJustDecodeBounds = true;
        BitmapFactory.decodeResource(getResources(),R.drawable.bigpic,options);
        int iWith = options.outWidth;
        int iHeight = options.outHeight;

        while ((iWith/sampleSize > MAXPICWITH) || (iHeight/sampleSize > MAXPICHEIGHT)){
            sampleSize = sampleSize*2;
        }

        options.inJustDecodeBounds = false;
        options.inSampleSize = sampleSize;
        Bitmap bm = BitmapFactory.decodeResource(getResources(),R.drawable.bigpic,options);

        return bm;


    }


}

图片的二次采样

1.为什么要进行图片的二次采样?主要是避免OOM。假设客户端需要加载一张图片,图片尺寸为3000*3000(单位/像素),那么计算一下,如果客户端想显示原图,按一个像素四个字节算, 3000 * 3...
  • u011102153
  • u011102153
  • 2015年10月16日 00:22
  • 2099

android高级之图片二次采样

默认情况下,bitmap每个像素点占用4个字节(ARGB_8888),比如一张3543×3503的图片差不多在内存中占用47M,安卓系统给每个应用分配的内存都是有限的,可以使用Runtime.getR...
  • program008
  • program008
  • 2016年01月23日 10:53
  • 920

Android开发之Bitmap二次采样

Bitmap二次采样,听着好像是一个高大上的事,其实也就那么回事,今天我们就来看看Bitmap的二次采样问题。1.为什么要二次采样OK,那么首先我要 解决的一个问题就是为什么我们要二次采样?不知道大家...
  • u012702547
  • u012702547
  • 2016年04月25日 21:31
  • 8968

Android中图片的二次采样示例

一.概述 在安卓系统中,照片的大小是根据摄像头的分辨率而定的,一般是分辨率X4,就是照片的大。由于安卓系统中规定照片大小不能超过16M,因此,如果直接将照片存入内存,会造成OOM(内存溢出),故采用...
  • FightFightFight
  • FightFightFight
  • 2015年11月10日 19:36
  • 2966

图片的三级缓存和二次采样使用的案例

首先跟大家介绍一下三级缓存,当然缓存的好处就是可以让用户体验更好,缺点就是没有实时更新数据,但我们大部分应用都不需要实时更新,所以三级缓存运用面比较广的。 所谓三级缓存其实是一种加载图片文件的策略,简...
  • MR_Condingson
  • MR_Condingson
  • 2016年11月19日 10:59
  • 887

Android Bitmap二次采样,大图处理

Bitmap 二次采样: 二次采样的目的是将高分辨率的图片进行采样缩放。由于手机给每个APP分配的空间是有限的。所以若是不对图片进行缩放的话,就容易造成内存溢出(即OOM,out of memory...
  • Whatfizzer
  • Whatfizzer
  • 2017年02月22日 15:21
  • 775

三级缓存,二次采样

Listview:性能优化 1:Listview是需要和适配器配合使用的, 常用的适配器有arrayAdapter,SimplerAdapter,SimpleCursorAdapter...
  • zhangxin0414
  • zhangxin0414
  • 2016年10月10日 19:16
  • 613

Android大图片的二次采样

今天来给大家看一下经典二次采样问题,看下我的和你的有什么区别吗: public class BitmapUtils { /** * @param res 资源对象 ...
  • qq_35189116
  • qq_35189116
  • 2017年05月24日 10:19
  • 67

Android---------二次采样和质量压缩

代码中写的很详细,直接上代码: XML布局中; xml version="1.0" encoding="utf-8"?> LinearLayout xmlns:android="http://...
  • leehbhs
  • leehbhs
  • 2017年10月11日 19:34
  • 89

图片处理-二次采样

二次采样
  • sinat_31057219
  • sinat_31057219
  • 2017年01月13日 16:25
  • 218
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:android图片二次采样
举报原因:
原因补充:

(最多只允许输入30个字)