[Android] 调用系统裁切图片的 !!! FAILED BINDER TRANSACTION !!! 错误

12 篇文章 0 订阅

需求:从系统里选择一张图片并裁剪为屏幕比例

采用网上流传的代码

        DisplayMetrics dm = getResources().getDisplayMetrics();
        int width = dm.widthPixels;
        int height = dm.heightPixels;
        Intent intent = new Intent(Intent.ACTION_GET_CONTENT);  
        intent.setType("image/*");  
        intent.putExtra("crop", true); 
        intent.putExtra("aspectX", width);
        intent.putExtra("aspectY", height); 
        intent.putExtra("return-data", true);  
        startActivityForResult(intent, REQUESTCODE_IMAGE); 

使用Intent调用图片浏览器后出现

!!! FAILED BINDER TRANSACTION !!!错误

(error过滤器中 本应用的过滤器中未出现)

将裁切框缩小没问题 截图后发现返回的Intent中有个Bitmap对象


问Google后发现Intent有个极低的容量上限 

Intent传输的bytes不能超过40k

现在使用的代码

        DisplayMetrics dm = getResources().getDisplayMetrics();
		int width = dm.widthPixels;
		int height = dm.heightPixels;

		Intent intent = new Intent(Intent.ACTION_GET_CONTENT, null);
		intent.setData(MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
		intent.setType("image/*"); // 选择的内容为图片,
		intent.putExtra("crop", "circle"); // 调用裁剪
		intent.putExtra("aspectX", width); // 裁剪框 宽。
		intent.putExtra("aspectY", height); // 裁剪框 高.
		intent.putExtra("output", Uri.fromFile(customBgImage));// 输出到文件
		intent.putExtra("outputFormat", "PNG");// 返回格式
		intent.putExtra("noFaceDetection", true); // 去除面部检测
		intent.putExtra("return-data", false); // 不要通过Intent传递截获的图片
		startActivityForResult(intent, REQUESTCODE_IMAGE);

customBgImage 是一个File类 为存储剪切后图片的文件

系统裁切会自动将裁切好的图片存储为该文件

接下来只要在onActivityResult中 调用这个文件即可

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值