应用中图片裁剪的需求是很常见的,在android中裁剪的图片最简单的方法就是调用系统中的裁剪图片应用

Intent intent = new Intent();
intent.setAction("com.android.camera.action.CROP");
intent.setDataAndType(uri, "image/*");
startActivityForResult(intent, Constants.REQUEST_CODE_RESIZE_IMAGE);

当然在调用系统的裁剪功能时,我们还可以附加一些其他的信息:

intent.putExtra("outputX", 300);  //裁剪图片的宽
intent.putExtra("outputY", 300);  
intent.putExtra("aspectX", 1);  //裁剪方框宽的比例
intent.putExtra("aspectY", 1);  
intent.putExtra("scale", true);  //是否保持比例
intent.putExtra("return-data", false);  //是否返回bitmap

intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);  //保存图片到指定uri
intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString());  //输出格式

上面的是一些常用的附加信息,如果你的outputX和outputY设置的比较大的话,返回的图片可能会导致OOM。最后在onActivityResult中接收图片就可以了

protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
    super.onActivityResult(requestCode, resultCode, data);
    switch (requestCode)
    {
        case CROP_IMAGE_SYS:
            Bitmap bitmap = (Bitmap) data.getParcelableExtra("data");//拿到返回图片
            /*try
            {
             //取的裁剪后保存到本地的图片
              bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(uri));
            }
            catch (FileNotFoundException e)
            {
              e.printStackTrace();
            }*/
            //TODO
            break;
//...

当然因为android碎片化严重,不同厂商的系统也有所差异,所以系统的裁剪图片功能也可能有所不同,这也是坑,就像在我的项目中,发现有些手机基于内存考虑对图片缩略了很多,这样裁剪出来的图片分辨率就达不到项目要求,这时候就只能求助于第三方的开源项目或者自定义了,在第二篇文章中Android中的图片裁剪(二),我会说说如何自己实现裁剪图片的功能。