您的位置:首页 > 移动开发 > Android开发

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

2013-04-03 21:21 399 查看
需求:从系统里选择一张图片并裁剪为屏幕比例

采用网上流传的代码

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中 调用这个文件即可
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐