android:图片裁剪

图片裁剪:

public class MainActivity extends Activity {
    public final int START_CAMERA_RESULT = 1;
    public final int START_PIC_CROP_RESULT = 2;
    public final int START_CAMERA_PIC_CROP_RESULT = 3;
    private Uri imageUri;
    private ImageView pic;
    private ImageView camera;
    private Uri imageUri2;
    private Uri imageUri3;

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

        pic = (ImageView) findViewById(R.id.imageView_pic);
        camera = (ImageView) findViewById(R.id.imageView_camera);

        // 图片剪裁后保存位置
        imageUri = Uri.fromFile(new File(Environment.getExternalStorageDirectory(), "temp.jpg"));
        // 照片保存位置
        imageUri2 = Uri.fromFile(new File(Environment.getExternalStorageDirectory(), "temp2.jpg"));
        // 照片剪裁后保存位置
        imageUri3 = Uri.fromFile(new File(Environment.getExternalStorageDirectory(), "temp3.jpg"));

        // 图片剪裁
        Button picCrop = (Button) findViewById(R.id.btn_pic);
        picCrop.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = imageCrop(null, imageUri, Intent.ACTION_PICK);
                startActivityForResult(intent, START_PIC_CROP_RESULT);
            }
        });
        // 启动照相机并把图片剪裁
        Button startCamera = (Button) findViewById(R.id.btn_camera);
        startCamera.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                Intent intent = new Intent();
                intent.setAction(MediaStore.ACTION_IMAGE_CAPTURE);
                intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri2);
                startActivityForResult(intent, START_CAMERA_RESULT);
            }
        });
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        switch (requestCode) {
        case START_PIC_CROP_RESULT:
            setImageView(imageUri, pic);
            break;
        case START_CAMERA_RESULT:
            Intent intent = imageCrop(imageUri2, imageUri3, "com.android.camera.action.CROP");
            // 启动裁剪的activity
            startActivityForResult(intent, START_CAMERA_PIC_CROP_RESULT);
            break;
        case START_CAMERA_PIC_CROP_RESULT:// 照片剪裁后处理
            Log.i("MainActivity", "START_CAMERA_PIC_CROP_RESULT");
            setImageView(imageUri3, camera);
            break;
        default:
            break;
        }
    }

    /**
     * 图片剪裁函数
     * 
     * @param fromUri
     * @param toUri
     * @param action
     * @return
     */
    private Intent imageCrop(Uri fromUri, Uri toUri, String action) {
        Intent intent = new Intent();
        // Intent.ACTION_PICK
        intent.setAction(action);
        /**
         * <data android:mimeType="image/*"/>
         */
        if (fromUri != null) {
            intent.setDataAndType(fromUri, "image/*");
        } else {
            intent.setType("image/*");
        }

        // 设置参数
        intent.putExtra("crop", "true");// getIntent().getStringExtra("crop");
        intent.putExtra("aspectX", 2);
        intent.putExtra("aspectY", 1);
        // 设置具体长宽
        intent.putExtra("outputX", 600);
        intent.putExtra("outputY", 300);
        // 设置是否放大缩小
        intent.putExtra("scale", true);
        intent.putExtra("return-data", false);
        // 设置保存位置
        intent.putExtra(MediaStore.EXTRA_OUTPUT, toUri);
        // Log.i("MainActivity",
        // "toUri:"+toUri.toString()+"fromUri"+fromUri.toString());
        intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString());
        return intent;
    }

    /**
     * 根据Uri读取图片并显示
     * 
     * @param uri
     * @param imageView
     */
    private void setImageView(Uri uri, ImageView imageView) {
        // 读取内容提供者
        ContentResolver resovler = getContentResolver();
        InputStream is = null;
        try {
            is = resovler.openInputStream(uri);
            Bitmap bm = BitmapFactory.decodeStream(is);
            imageView.setImageBitmap(bm);
            Log.i("MainActivity", "set Bitmap");
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } finally {
            if (is != null) {
                try {
                    is.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

}
原文地址:https://www.cnblogs.com/mada0/p/4818692.html