图片的二次采样

来源:互联网 发布:sql按周统计数据 编辑:程序博客网 时间:2024/05/19 23:05
  @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        img = (ImageView) findViewById(R.id.img);
        //sd..bb.jpg 1024*768 2M
        //320*320分辨率


        //得到sd卡上图片的路径
        sdPicSdPath = Environment.getExternalStorageDirectory().getPath()+"/img/bb.jpg";


        //运行时权限的判断
        int i = ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE);
        if(i!= PackageManager.PERMISSION_GRANTED){//此权限没有被授权
            //申请权限-弹出对话框
            ActivityCompat.requestPermissions(MainActivity.this,new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},100);


        }else {//已经授权
            Bitmap bitmap= compassPic(sdPicSdPath,320,320);
            img.setImageBitmap(bitmap);
        }


    }


    //处理用户的授权结果
    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        //ctrl+alt+f  提取成全局变量
        if(requestCode==100){
            if(grantResults!=null && grantResults[0]==PackageManager.PERMISSION_GRANTED){
                Bitmap bitmap= compassPic(sdPicSdPath,320,320);
                img.setImageBitmap(bitmap);
            }else {
                Toast.makeText(MainActivity.this,"被拒绝了!",Toast.LENGTH_SHORT).show();
            }
        }
    }


    //二次采样-加载sd卡的图片


    /**
     *
     * @param picPath sd上图片的路径
     * @param widthPx 期望图片压缩的宽度 px
     * @param heightPx 期望图片压缩后的高度 px
     * @return
     */
    public Bitmap compassPic(String picPath,int widthPx,int heightPx){


        //第一次采样:主要是要拿到原图片的宽度与高度
        //第二次采样:计算采样率,进行压缩
        ///////////////////////////start 01/////////////////////////////////////
        BitmapFactory.Options options=new BitmapFactory.Options();
        options.inJustDecodeBounds=true;//设置成true,只拿图片的边框


        BitmapFactory.decodeFile(picPath,options);//根据图片,转换成Bitmap对象


        //得到图片的宽度与高度
        int outWidth = options.outWidth;
        int outHeight = options.outHeight;


        ///////////////////////////end 01/////////////////////////////////////
        //压缩率
        int sampleRate=1;
        if(outWidth>widthPx || outHeight>heightPx){
            int widthSample = outWidth / widthPx;
            int heightSample=outHeight/heightPx;
            //计算采样率
            sampleRate=widthSample>heightPx?widthSample:heightSample;
        }


        options.inJustDecodeBounds=false;//第二次设置成false
        options.inPreferredConfig= Bitmap.Config.RGB_565;//设置图片的色彩模式  1px=2字节  ARGB_8888  1px=4字节


        //最后得到的结果
        Bitmap bitmap=BitmapFactory.decodeFile(picPath,options);


        return bitmap;
    }
原创粉丝点击