在使用系统自带的剪切图片工具时,通常只能设置一些比较小的值,像

intent.putExtra("outputX", 320);

intent.putExtra("outputY", 320);

剪切后图片的尺寸不能设置为过大,经测试到480就会出现卡住的现象,为什么呢?

原因是在于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就是指定的保存地址。

利用MediaStore.EXTRA_OUTPUT,就可以规避Intent携带信息的不靠谱所造成的吃饭不香。那么具体怎样使用呢——

 1 protected void onActivityResult(int requestCode, int resultCode, Intent data) {
 2
 3         switch (requestCode){
 4             case RESULT_CANCELED:
 5                 ToastUtil.showCenter(R.string.cancel);
 6                 return;
 7             case 111://获取到图片后发送的requestCode,然后现在开始剪切
 8                 if (USER_ICON.exists()){
 9                     photoClip(Uri.fromFile(USER_ICON), 1, this);
10
11                 }
12                 break;
13
14             case 1://剪切成功后的返回
15                 Bitmap bitmap = null;
16                  try {
17                     bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(tempPhotoUri));
18                     //取出bitmap即可
19                 break;
20
21         }
22         super.onActivityResult(requestCode, resultCode, data);
23     }
24
25     public void photoClip(Uri uri, int requestCode, Activity a) {
26         Intent intent = new Intent();//调用系统自带的图片裁剪
27         intent.setAction("com.android.camera.action.CROP");
28         intent.setDataAndType(uri, "image/*");
29         intent.putExtra("crop", "true");//设置在开启的Intent中设置显示的VIEW可裁剪
30         intent.putExtra("aspectX", 16);//宽高比
31         intent.putExtra("aspectY", 9);
32         intent.putExtra("outputX", 1080);
33         intent.putExtra("outputY", 720);
34         intent.putExtra("return-data", false);//return置为false,获取截图保存的uri
35         intent.putExtra(MediaStore.EXTRA_OUTPUT, getTempUri());
36         intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString());
37         intent.putExtra("noFaceDetection", true);
38         a.startActivityForResult(intent, requestCode);
39     }
40
41     Uri tempPhotoUri;
42     private Uri getTempUri() {
43         tempPhotoUri = Uri.fromFile(getTempFile());
44         return tempPhotoUri;
45     }
46
47     private File getTempFile() {
48         if (FileUtils.envIsOk) {//这里只是个判断SD卡有效的方法
49             String dir = FileUtils.strSDPath + FileUtils.appName + FileUtils.BMP;
50             FileUtils.createDir(dir);
51             File f = new File(dir,"temp.jpg");
52             try {
53                 f.createNewFile();
54                  } catch (IOException e) {
55                 e.printStackTrace();
56                  }
57              return f;
58                }
59          return null;
60           }

附上裁剪属性表:

附加选项 数据类型 描述
crop String 发送裁剪信号
aspectX int X方向上的比例
aspectY int Y方向上的比例
outputX int 裁剪区的宽
outputY int 裁剪区的高
scale boolean 是否保留比例
return-data boolean 是否将数据保留在Bitmap中返回
data Parcelable 相应的Bitmap数据
circleCrop String 圆形裁剪区域?
MediaStore.EXTRA_OUTPUT ("output") URI 将URI指向相应的file:///...,详见代码示例
outputFormat String 输出格式,一般设为Bitmap格式:Bitmap.CompressFormat.JPEG.toString()
noFaceDetection boolean 是否取消人脸识别功能

参考:http://blog.csdn.net/augusaccount/article/details/54890169

  http://www.cppblog.com/ctou45/archive/2013/02/20/197947.aspx

android调用系统的自定义裁剪后得到的图片不清晰,使用MediaStore.EXTRA_OUTPUT获取缓存下的清晰图片...相关推荐

  1. (复习)android 调用系统相机 图库 裁剪-图片上传-客服端-服务器

    引用转载http://www.cnblogs.com/eyu8874521/archive/2012/07/20/2600697.html 效果: 客服端代码: package com.cn.lxz. ...

  2. android rom 裁剪,Android之调用系统照相机并裁剪

    Android调用系统照相机.相片并裁剪图片并不是很难,网上也有很多资料,但是在实现的过程中我还是遇到了一些问题,现在做个总结. 一. 声明系统权限 因为调用的是系统照相机并且需要对sd卡进行读写操作 ...

  3. Android 调用系统裁剪,适配11和12及手机

    前言:发现Android 调用系统裁剪时,在各Android 版本出现各种问题,踩了一堆坑,做一下总结,免得以后忘记 后面会有完整裁剪代码 1,一加手机报错 intent.putExtra(" ...

  4. android 实现自动拍照,Android:调用系统相机实现拍照+裁切(兼容7.0以上系统)

    android.jpg 前言 在平时的工作中,我们会经常遇到这样的需求:比如更改用户头像,我们就需要打开相机或相册,选择照片后进行裁剪,最后上传给后台... 相信这样的功能对小伙伴们来说可能早已司空见 ...

  5. android 调用系统播放器

    今天,简单讲讲android如何调用手机自带的播放器. 昨天,从服务器下载一个AVI的视频,下载后需要进行播放,所以想调用系统自带的播放器.但是由于很少用到,所以自己当时不知道怎么写,于是在网上查找资 ...

  6. Android调用系统的拍照,打开相册功能

    Android调用系统的拍照,打开相册功能 1 添加权限: <!-- 往SDCard写入数据权限 --> <uses-permission android:name="an ...

  7. Android7.0调用系统相机和裁剪

    最近将项目的targetSdkVersion升级到了26,发现调用系统相机的时候报了下面这个错误: android.os.FileUriExposedException: file:///storag ...

  8. android 调用系统前置摄像头

    从Android 2.3 Gingerbread开始,原生支持前置摄像头.下面我们看看如何在程序里来调用前置的摄像头. 第一种方式是采用MediaStore,调用系统原生的相机. view plain ...

  9. android安装自动打开网页,Android调用系统自带浏览器打开网页的实现方法

    Android调用系统自带浏览器打开网页的实现方法 在Android中可以调用自带的浏览器,或者指定一个浏览器来打开一个链接.只需要传入一个uri,可以是链接地址. 启动android默认浏览器 在A ...

  10. Android调用系统分享和指定app分享-微信朋友圈图文分享和qq分享

    Android调用系统分享和指定app分享-微信朋友圈图文分享和qq分享 标签: Android系统分享QQ分享朋友圈图文分享 2016-09-27 22:54 279人阅读 评论(0) 收藏 举报 ...

最新文章

  1. 少年宫计算机室活动小结,微机室管理工作总结
  2. Android 利用addView 动态给Activity添加View组件
  3. Video4Linux
  4. CodeForces - 858D Polycarp's phone book(字典树/map)
  5. 大坑!有网,电脑qq登不上去!!
  6. 处理String类常用的方法1
  7. matlab aic sic,sic是什么意思_sic的翻译_音标_读音_用法_例句_爱词霸在线词典
  8. 人工智能的前景:更高智慧的体的诞生
  9. 域迁移过程下详细步骤
  10. Android中的控件
  11. 好莱坞法则_人工智能去好莱坞
  12. 《炬丰科技-半导体工艺》 光学镜片和玻璃部件的超声波清洗
  13. jQuery 滚动条插件nicescroll 使用方法、常见配置和事件回调使用说明
  14. linux下输入法终极解决方案
  15. html5考试总结300字,期中考试总结
  16. Photoshop使用边缘功能打造后期画意
  17. 《Hexo: 从零开始编写自己的主题》3. 优化样式,设计自己的主题
  18. ESXi/ESX 链路聚合
  19. mp4转换m3u8格式php,【过程】第一次将m3u8文件转换为MP4文件经验分享
  20. Linux系统下的一些常用基本命令

热门文章

  1. 搜索引擎中影响索引长度的因素
  2. 面向对象之自动绑定数据源
  3. 84相似标准形05——有理标准形的不变因子、矩阵的有理标准形
  4. 【论文阅读】Automated quantification of white matter lesion in magnetic resonance imaging
  5. python json dump_为什么json.dump()没有以\ n结尾? - python
  6. visio保存后公式变形_固体力学中的变形分析
  7. brave mysql_MYSQL常用命令
  8. L1-040 最佳情侣身高差 (10 分)—团体程序设计天梯赛
  9. 永久的CheckBox(单选,全选/反选)!
  10. [USACO16OPEN]262144