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;


    }


}

Android中图片的二次采样示例

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

Android图片加载方案——如何保证图片清晰度同时,最大限度节省内存使用量

最近做的项目里,需要在主页面加载很多图片。那么就尝尝出现OOM,尝试了多种方法,最后找到一种很不错的办法,极大的节省了内存空间,原先程序运行时的内存占有量大约在120-200左右,又时甚至能达到醉人的...

Android 图片资源显示效果研究

Android支持的图片资源格式及其特性 Android系统支持常见的图片资源格式,如jpg、png、gif等。这几种主要图片格式的特点如下: 1.    Gif格式图片的特点 透明性:Gif是...
  • aaa2832
  • aaa2832
  • 2012年07月03日 21:57
  • 11184

Android 图片二次采样、质量压缩

引言: Android系统支持几种图片(.png (preferred), .jpg (acceptable), .gif (discouraged)), 其中Bitmap位图#ffffffff...

Android 图片二次采样、质量压缩

引言: Android系统支持几种图片(.png (preferred), .jpg (acceptable), .gif (discouraged)), 其中Bitmap位图#ffffffff...

Android内存优化图片二次采样

day26 lrucahe 图片的二次采样 - 软引用 当内存不足时 自动回收 弱虚引用 当只有弱虚引用指向的时候就会被回收 不再合适的原因: 应用程序当内存不足可以申请内...

android高级之图片二次采样

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

Android_Bitmap_图片的二次采样并生成缩略图

首先尝试通过字节数组或者流,只去加载图片的外边缘,此时必须指定BitmapFactory.Options 的inJustDecodeBounds成员名,将其只为true,一旦设置为true,Bitma...
  • kazeik
  • kazeik
  • 2013年12月19日 21:30
  • 4046

Android_Bitmap_图片的二次采样并生成缩略图

1.Bitmap概述 Android系统支持几种图片(.png (preferred), .jpg (acceptable), .gif (discouraged)), 其中Bitmap位图#f...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:android图片二次采样
举报原因:
原因补充:

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