Android调用本地相册选择图片并剪切后展示和缓存

直接来代码(注释足够清楚了):

选择图片.setOnClickListener(new View.OnClickListener(){
        gallery();
    });

    private void gallery() {
        // 选择本地图片
        Intent intent = new Intent(Intent.ACTION_PICK,null);
        intent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
                "image/*");
        // 开启一个带有返回值的Activity
        startActivityForResult(intent, 2);
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (requestCode == 2) {
            if (data != null) {
                // 得到图片的路径
                Uri uri = data.getData();
                crop(uri);
            }
        } else if (requestCode == 3) {
            // 从剪切图片返回的数据
            if (data != null) {
                getPic(data);
            }
        }
        super.onActivityResult(requestCode, resultCode, data);
    }

    /*
    * 剪切图片
    */
    private void crop(Uri uri) {
        // 裁剪图片
        Intent intent = new Intent("com.android.camera.action.CROP");
        intent.setDataAndType(uri, "image/*");
        intent.putExtra("crop", "true");
        // 裁剪框的比例,1:1
        intent.putExtra("aspectX", 1);
        intent.putExtra("aspectY", 1);
        // 裁剪后输出图片的尺寸大小
        // 这里吐槽下:X Y的值在返回的是data的时候,不同的手机能够承受的上限是不一样的,
        // 举个例子:之前写到405:VIVO X6没有任何问题,而在小米note4上就抛了SecurityException!
        intent.putExtra("outputX", 250);
        intent.putExtra("outputY", 250);

//        intent.putExtra("outputFormat", "PNG");// 图片格式
//        intent.putExtra("noFaceDetection", true);// 取消人脸识别
        intent.putExtra("return-data", true);
        // 开启一个带有返回值的Activity
        startActivityForResult(intent, 3);
    }

    /**
     * @author xixili
     * created at 2016/2/27 14:32
     * 获取剪切之后的图片
     */
    private void getPic(Intent picdata) {
        Bundle extras = picdata.getExtras();
        if (extras != null) {
            Bitmap photo = extras.getParcelable("data");//转换为Bitmap类型

            if(photo!=null){
                aCache.put("ShakeBgFromUser",photo);    //保存在缓存里,ACache是我用的一个缓存框架
                imageView.setImageBitmap(photo);//展示
            }
        }
    }



你可能感兴趣的:(Android)