根据我们的分析与总结,图片的来源有拍照和相册,而可采取的操作有

  • 使用Bitmap并返回数据
  • 使用Uri不返回数据

前面我们了解到,使用Bitmap有可能会导致图片过大,而不能返回实际大小的图片,我将采用大图Uri,小图Bitmap的数据存储方式。

我们将要使用到URI来保存拍照后的图片:

?
1
2
private static final String IMAGE_FILE_LOCATION = "file:///sdcard/temp.jpg";//temp file
Uri imageUri = Uri.parse(IMAGE_FILE_LOCATION);//The Uri to store the big bitmap

不难知道,我们从相册选取图片的Action为Intent.ACTION_GET_CONTENT。

根据我们上一篇博客的分析,我准备好了两个实例的Intent。

    一、从相册截大图:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
Intent intent = new Intent(Intent.ACTION_GET_CONTENT, null);
intent.setType("image/*");
intent.putExtra("crop", "true");
intent.putExtra("aspectX", 2);
intent.putExtra("aspectY", 1);
intent.putExtra("outputX", 600);
intent.putExtra("outputY", 300);
intent.putExtra("scale", true);
intent.putExtra("return-data", false);
intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString());
intent.putExtra("noFaceDetection", true); // no face detection
startActivityForResult(intent, CHOOSE_BIG_PICTURE);

二、从相册截小图

?
1
2
3
4
5
6
7
8
9
10
11
12
Intent intent = new Intent(Intent.ACTION_GET_CONTENT, null);
intent.setType("image/*");
intent.putExtra("crop", "true");
intent.putExtra("aspectX", 2);
intent.putExtra("aspectY", 1);
intent.putExtra("outputX", 200);
intent.putExtra("outputY", 100);
intent.putExtra("scale", true);
intent.putExtra("return-data", true);
intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString());
intent.putExtra("noFaceDetection", true); // no face detection
startActivityForResult(intent, CHOOSE_SMALL_PICTURE);

    三、对应的onActivityResult可以这样处理返回的数据

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
switch (requestCode) {
case CHOOSE_BIG_PICTURE:
    Log.d(TAG, "CHOOSE_BIG_PICTURE: data = " + data);//it seems to be null
    if(imageUri != null){
        Bitmap bitmap = decodeUriAsBitmap(imageUri);//decode bitmap
        imageView.setImageBitmap(bitmap);
    }
    break;
case CHOOSE_SMALL_PICTURE:
    if(data != null){
        Bitmap bitmap = data.getParcelableExtra("data");
        imageView.setImageBitmap(bitmap);
    }else{
        Log.e(TAG, "CHOOSE_SMALL_PICTURE: data = " + data);
    }
    break;
default:
    break;
}

?
1
2
3
4
5
6
7
8
9
10
private Bitmap decodeUriAsBitmap(Uri uri){
    Bitmap bitmap = null;
    try {
        bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(uri));
    } catch (FileNotFoundException e) {
        e.printStackTrace();
        return null;
    }
    return bitmap;
}

    效果图:

大图 小图

转载(http://my.oschina.net/ryanhoo/blog/86853)

转载于:https://www.cnblogs.com/cimu/p/4319823.html

Android大图片裁剪终极解决方案相关推荐

  1. Android大图片裁剪终极解决方案 原理分析

    约几个月前,我正为公司的APP在Android手机上实现拍照截图而烦恼不已. 上网搜索,确实有不少的例子,大多都是抄来抄去,而且水平多半处于demo的样子,可以用来讲解知识点,但是一碰到实际项目,就漏 ...

  2. linux图片切割,从相册截图 - Android大图片裁剪终极解决方案_Linux编程_Linux公社-Linux系统门户网站...

    在这篇文章中,我将向大家展示如何从相册截图. 上一篇文章中,我就拍照截图这一需求进行了详细的分析,试图让大家了解Android本身的限制,以及我们应当采取的实现方案. 根据我们的分析与总结,图片的来源 ...

  3. Android大图片裁剪解决方案

    2019独角兽企业重金招聘Python工程师标准>>> 截图原理 在Android中,Intent触发Camera程序,拍好照片后,将会返回数据,但是考虑到内存问题,Camera不会 ...

  4. Android大图片裁剪之手机拍照和从相册中选择注意点

    Intent("com.android.camera.action.CROP"):中data.MediaStore.EXTRA_OUTPUT以及return-data data:P ...

  5. android 获取视频缩略图终极解决方案(ffmpeg)

    android 获取视频缩略图终极解决方案(ffmpeg) 参考文章: (1)android 获取视频缩略图终极解决方案(ffmpeg) (2)https://www.cnblogs.com/juka ...

  6. Android大图片背景性能优化篇

    内存优化-Android大图片 最近在做一个游戏项目,项目中使用大量的1080P作为背景图片,整个APP内存很快就超过峰值,导致项目中出现多处内存溢出.掉帧现象. Meizu Mx4pro(260M左 ...

  7. android图片压缩终极解决方案

    如题,多种压缩方式常用的有尺寸压缩.质量压缩以及通过JNI调用libjpeg库来进行压缩,三种方式结合使用实现指定图片内存大小,清晰度达到最优,下面就先分别介绍下这几种压缩方式. 原文出处:http: ...

  8. Android大图片处理

    移动设备对内存的要求还是很苛刻的,即便现在主流旗舰机动辄3G.4G的内存,但是对应于每个App分得的容量来说还是有限的,我们程序猿可以用各种手段来增大单个App的需求量,但是并不是完美的解决方案.最好 ...

  9. 关于大图片裁剪在华为等手机上无法使用问题

    项目中我们在进行图片上传时,往往不是选择好图片直接上传就好,而是需要进行一些操作,比如裁剪.通常我的的裁剪是这样的. public void startPhotoZoom(Uri uri, int w ...

最新文章

  1. 沈向、洋周明:神经自然语言处理进展综述:建模,学习,推理
  2. css selector list
  3. 【转】深入了解CPU两大架构ARM与X86
  4. HDU Problem - 5113 Black And White(搜索剪枝)
  5. [归并][随机算法] JZOJ P3765 想法
  6. SSO的通用标准OpenID Connect
  7. HDU1755 A Number Puzzle【全排列+暴力】
  8. SpringMVC----视图层框架
  9. 使用Carbide进行调试时免除重新启动模拟器的一种方法(转)
  10. 因式分解题目及过程_两道新定义题目的对比分析
  11. Python数据分析第四课:数据的处理(数据合并、数据筛选、数据排序)
  12. 算法题目打卡:Ques20201007
  13. 2004年下半年 网络工程师 上下午试卷【附带答案】
  14. GPU Skinning旋转指定骨骼
  15. PBOC规范研究之七 ----应用选择(转)
  16. 【转】Actionscript,AS3,MXML,Flex,Flex Builder,Flash Builder,Flash,AIR,Flash Player之关系
  17. Smart Client Software Factory安装
  18. Teamface可定制化的CRM管理软件,颠覆传统的管理软件
  19. 安卓手机安装运行青龙面板
  20. 企业数字化转型的核心是什么?如何才能真正做到数字化转型?

热门文章

  1. linux 常用命令技巧
  2. TO C AND TO B IN TERMS OF CUSTOMER
  3. TIPS FOR LIVING AT CAMBRIDGE
  4. 年轻人对于“绰号”的认识
  5. ORACLE穿透防火墙问题
  6. redis和memcache的高可用的探索
  7. java 容器、二叉树操作、107
  8. TCP/IP详解学习笔记(7)-广播和多播,IGMP协议
  9. 转载:Linux 的系统服务及其配置(略有修改)
  10. nyoj 304(区间dp)