史上最强Android 开启照相或者是从本地相册选中一张图片以后先裁剪在保存并显示的讲解附源码
整个程序的布局很简单
只在一个垂直方向上的线性布局里面有俩个按钮(Button)和一个显示图片的控件(ImageView)
这里就不给出这部分的代码了
1.是打开系统的相册
Intent albumIntent = new Intent(Intent.ACTION_PICK, null);
albumIntent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, "image/*");
startActivityForResult(albumIntent, ALBUM_OK);
这里是通过启动一个系统的隐式意图打开的本地相册
2.是开启系统的拍照
Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
// 下面这句指定调用相机拍照后的照片存储的路径
if (pre.exists()) {
pre.delete();
}
try {
pre.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(pre));
startActivityForResult(cameraIntent, CAMERA_OK);
通过开启一个隐式意图打开照相机
3.进行裁剪 这里的裁剪也是通过一个隐式意图调用系统的功能的
/**
* 裁剪图片方法实现
*
* @param uri 图片来源
*/
public void clipPhoto(Uri uri) {
Intent intent = new Intent("com.android.camera.action.CROP");
intent.setDataAndType(uri, "image/*");
intent.putExtra("crop", "true");
// aspectX aspectY 是宽高的比例,这里设置的是正方形(长宽比为1:1)
intent.putExtra("aspectX", 1);
intent.putExtra("aspectY", 1);
// outputX outputY 是裁剪图片宽高
intent.putExtra("outputX", 300);
intent.putExtra("outputY", 300);
intent.putExtra("return-data", true);
startActivityForResult(intent, CUT_OK);
}
4.显示、保存图片
/**
* 保存裁剪之后的图片数据 将图片设置到imageview中
*
* @param picdata
*/
private void setPicToView(Intent picdata) {
CLog.d(TAG, "将图片显示在控件上");
Bundle extras = picdata.getExtras();
if (extras != null) {
bitmap = extras.getParcelable("data");
// TODO 设置图片之前 应该将之前的图片删除,将最新的图片保存
readBitmap2File(bitmap);
headPhoto.setImageBitmap(bitmap);
}
}
下面附上整个程序的源代码(其中还包括一个队图片进行二次采样的工具类)
这里面有一个问题有待验证。
在保存图片的时候,当时我的做法是先判断SDCard卡是否可用,
不可用的情况直接保存到手机内存,在这个地方,有人和我提到过好像由于某些问题,是不能保存到这个地方的。
可用的情况下,直接就在SDCard卡中保存。
点击下载源代码
版权声明:本文为博主原创文章,未经博主允许不得转载。
史上最强Android 开启照相或者是从本地相册选中一张图片以后先裁剪在保存并显示的讲解附源码的更多相关文章
- 史上最强Java NIO入门:担心从入门到放弃的,请读这篇!
本文原题“<NIO 入门>,作者为“Gregory M. Travis”,他是<JDK 1.4 Tutorial>等书籍的作者. 1.引言 Java NIO是Java 1.4版 ...
- JVM面试题(史上最强、持续更新、吐血推荐)
文章很长而且持续更新,建议收藏起来,慢慢读! 高并发 发烧友社群:疯狂创客圈(总入口) 奉上以下珍贵的学习资源: 疯狂创客圈 经典图书 : 极致经典 + 社群大片好评 < Java 高并发 三部 ...
- Webbrowser控件史上最强技巧全集
原文:Webbrowser控件史上最强技巧全集 Webbrowser控件史上最强技巧全集 VB调用webbrowser技巧集 1.获得浏览器信息: Private Sub Command1_Click ...
- 史上最强php生成pdf文件,html转pdf文件方法
body{ font-family: "Microsoft YaHei UI","Microsoft YaHei",SimSun,"Segoe UI& ...
- 史上最全面 Android逆向培训之__实战(hook微信)
我的CSDN博客:https://blog.csdn.net/gfg156196 by--qihao 书接上文,上回说到了xposed,接下来就用一下,体验一下商业项目的赶脚…… 上一篇:史上最全 ...
- 史上最强maven配置详情
史上最强maven配置详情 优点 对第三方依赖库进行了统一的版本管理 统一了构建过程 统一了项目的目录结构 构建 清理 : mvn clear 编译 : mvn compile 测试 : mvn te ...
- 一文深入了解史上最强的Java堆内缓存框架Caffeine
它提供了一个近乎最佳的命中率.从性能上秒杀其他一堆进程内缓存框架,Spring5更是为了它放弃了使用多年的GuavaCache 缓存,在我们的日常开发中用的非常多,是我们应对各种性能问题支持高并发的一 ...
- Java算法面试题(史上最强、持续更新、吐血推荐)
文章很长,建议收藏起来,慢慢读! 疯狂创客圈为小伙伴奉上以下珍贵的学习资源: 疯狂创客圈 经典图书 : <Netty Zookeeper Redis 高并发实战> 面试必备 + 大厂必备 ...
- Android中Canvas绘图基础详解(附源码下载) (转)
Android中Canvas绘图基础详解(附源码下载) 原文链接 http://blog.csdn.net/iispring/article/details/49770651 AndroidCa ...
随机推荐
- Java中有关日期的一些常见运算与应用(Date,DateFormat,SimpleDateFormat)
import java.text.DateFormat; import java.text.DateFormat; import java.text.SimpleDateFormat; import ...
- AnyEvent::HTTP 介绍
AnyEvent::HTTP - simple but non-blocking HTTP/HTTPS client 一个简单的非堵塞的 HTTP/HTTPS 客户端: use AnyEvent::H ...
- IT第八天 - 类的应用、debug、项目开发模式优化
IT第八天 上午 类的应用 1.对象在实例化时是非常耗费系统资源的,因此要尽量减少new字段的使用 2.类的初始值是null,在使用未实例化的类时,很容易导致报错:NullExceptionPoint ...
- ImageMagick 拼图及切图方法
ImageMagick 拼图方法1. 拼图montage *.jpg -tile 22x2 -geometry 64x256+0+0 10-.jpg将目录里的jpg文件按顺序拼成x轴22块,y轴2 ...
- CSS中border-style的属性
属性可能的值 值 描述 none 定义无边框. hidden 与 "none" 相同.不过应用于表时除外,对于表,hidden 用于解决边框冲突. dotted 定义点状边框.在大 ...
- Android:源码环境下移植第三方的apk内置到ROM(System Image)中
1. 首先在vendor目录下新建一个the3rdapk的目录,将需要内置的apk丢进去,目录名自己随意定. 2. 在 build/target/product/common.mk最后面,在$(cal ...
- sc delete 服务名
当我们在cmd里使用 sc delete 服务名 ,来删除服务的时候,报错误,SC OpenService 失败5:拒绝访问. 这似乎是因为权限不够,解决方法. 首先,我们必须先取得管理员权限,以 ...
- windows 下搭建 apache + php52 + postgreSQL7/8/9环境
apache和php安装参考:[转]Windows7 64bit下配置Apache+PHP+MySQL 我这主要讲配置 apache 支持 postgresql9数据库: 1.将php5文件夹下的p ...
- ThinkPHP分页类
第一种:利用Page类和limit方法 $User = M('User'); // 实例化User对象$count = $User->where('status=1')->cou ...
- Raphael入门实例:绘图
raphael 实例 开始 创建画布参数说明 创建一个画布对象. 下面每个例子都会创建一个320*200大小的画布. ? 1 2 // 1.在视口的 (10,50) 坐标位置上创建画布 var pap ...