Android 解决裁剪图片尺寸变大闪退问题

转载自:http://blog.csdn.net/augusaccount/article/details/54890169


废话buduosh不多说,直接上代码,以下就是我测试出来的结果:

Intent intent = new Intent("com.android.camera.action.CROP");
                //com.android.camera.action.CROP这个action是用来裁剪图片用的
                intent.setDataAndType(uri, "image/*");
                // 设置裁剪
                intent.putExtra("crop", "true");
                //aspectX,aspectY,outputX,outputY必须为int型,否则无效,项目中宽高比为1.6
                // aspectX aspectY 是宽高的比例,没有化简是因为网上说aspectX aspectY一定要比outputX,outputY大,否则会闪退。
                //但是实际测试中用的8:5也没有什么问题,但是为了保险起见还是用了800:500
                intent.putExtra("aspectX", 800);
                intent.putExtra("aspectY", 500);
                // outputX outputY 是裁剪图片宽高
                //清晰度够的情况下还是用360比较好
                intent.putExtra("outputX", 360);
                intent.putExtra("outputY", 225);
                //480的比例会奔溃,因此440为上限了
//                intent.putExtra("outputX", 480);
//                intent.putExtra("outputY", 300);
//                intent.putExtra("outputX", 440);
//                intent.putExtra("outputY", 275);
                intent.putExtra("return-data", true);
                startActivityForResult(intent, CROP_SMALL_PICTURE);

附上裁剪属性表:

附加选项数据类型描述
cropString发送裁剪信号
aspectXintX方向上的比例
aspectYintY方向上的比例
outputXint裁剪区的宽
outputYint裁剪区的高
scaleboolean是否保留比例
return-databoolean是否将数据保留在Bitmap中返回
dataParcelable相应的Bitmap数据
circleCropString圆形裁剪区域?
MediaStore.EXTRA_OUTPUT ("output")URI将URI指向相应的file:///...,详见代码示例
outputFormatString输出格式,一般设为Bitmap格式:Bitmap.CompressFormat.JPEG.toString()
noFaceDetectionboolean是否取消人脸识别功能

【注意】我们在使用剪切图片的时候,通常我们设置属性只能设置一些比较小的值,像intent.putExtra("outputX", 320);intent.putExtra("outputY", 320);剪切后图片的尺寸不能设置为过大,经测试到640就会出现卡住的现象,为什么呢?原因是在于Intent 的data域最大传递的值的大小约为1M,所以图片的BITMAP当超过1M时就会失败。通常我们只是设置头像可以用这个方法,那么如果我们要剪切显示一些比较大的图片呢?怎么做呢?

该方法就是先设置为return-data设为false,不从data域获取图片,而是越过这个桥梁,通过我们刚刚在剪切图片后设置的路径目录和名称来单独获取这个图片,就可以完美显示了。如果不设置return-data为false,那么就会默认通过data返回,从而造成卡住现像。

return-data:是将结果保存在data中返回,在onActivityResult中,直接调用intent.getdata()就可以获取值了,这里设为fase,就是不让它保存在data中

MediaStore.EXTRA_OUTPUT:由于我们不让它保存在Intent的data域中,但我们总要有地方来保存我们的图片,这个参数就是转移保存地址的,对应Value中保存的URI就是指定的保存地址。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值