二次采样

来源:互联网 发布:jenkins下载for mac 编辑:程序博客网 时间:2024/04/29 23:32
   private ImageView imageView;

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

        imageView = (ImageView) findViewById(R.id.image_view);

    }

    public void erCi(View view){

        /**
         * java.lang.OutOfMemoryError内存溢出的异常 ...OOM=OutOfMemoryError
         *
         * 当我们加载一张很大的图片 的时候可能会出现内存溢出,,,处理这张大图片...二次采样
         *
         * 二次采样就是为了避免图片加载时的OOM异常
         *
         * 参考博客:http://blog.csdn.net/u012702547/article/details/51245133
         *
         * 第一次采样我主要是想要获得图片的压缩比例
         *
         * 第二次采样是加载图片的缩略图
         */
        //imageView.setImageResource(R.drawable.aaa);

        Bitmap bitMap = getBitMap(Environment.getExternalStorageDirectory() + "/aaa.jpg", 320, 480);

        imageView.setImageBitmap(bitMap);


    }

    /**
     * 这个方法是二次采样的方法
     * @param path 图片的路径
     * @param width 图片要显示的宽度
     * @param height 图片要显示的高度
     * @return 返回值是bitmap
     */
    private Bitmap getBitMap(String path,int width,int height){

        //1.第一次采样不加载整张图片,,,只加载边框
        //从文件解码一个图片
        BitmapFactory.Options options = new BitmapFactory.Options();
        //设置只加载边框
        options.inJustDecodeBounds = true;
        BitmapFactory.decodeFile(path,options);

        //获取大图片的宽度和高度
        int outWidth = options.outWidth;
        int outHeight = options.outHeight;

        //计算宽度和高度显示的比例
        int x = outWidth / width;
        int y = outHeight / height;

        //这是压缩的比例
        int simpleSize = 1;

        if (x>y && y>1){
            simpleSize = x;
        }else if (y>x && x>1){
            simpleSize = y;
        }

        //........到这个位置计算出压缩的比例,,,完成第一次采样

        //第二次采样是加载图片的缩略图

        options.inJustDecodeBounds = false;//不在只加载边框,,,要加载整个图片的像素点
        options.inSampleSize = simpleSize;//指定加载图片的压缩比例
        options.inPreferredConfig = Bitmap.Config.RGB_565;//设置图片的加载模式...565在内存中一个像素占2字节,,8888一个像素占4个字节
        //Bitmap.Config.ALPHA_8;
        //Bitmap.Config.ARGB_4444;
        //Bitmap.Config.ARGB_8888

        return BitmapFactory.decodeFile(path,options);//以...选项去解码图片文件,,,返回值是bitmap
    }
原创粉丝点击