Android 图片选择与裁剪实战指南
5星 · 超过95%的资源 181 浏览量
更新于2024-08-29
收藏 64KB PDF 举报
"这篇资源是关于在Android应用中实现拍照和从图库选择图片,并进行裁剪的功能。作者通过阅读《第一行代码》并结合网络资料,创建了一个简单的示例Demo来演示这一过程。"
在Android开发中,经常需要集成拍照、从图库选择图片以及对图片进行裁剪的功能。以下是如何实现这些功能的详细步骤:
一、拍照选择图片
1. 启动相机应用:
要启动系统的相机应用,可以创建一个隐式Intent,指定动作为`MediaStore.ACTION_IMAGE_CAPTURE`。这样,系统会寻找能够处理此动作的应用(通常是相机应用):
```java
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent, 1);
```
这里的`1`是请求码,用于在回调方法中区分不同的操作。
2. 处理相机返回的结果:
当用户拍照完成后,可以通过`onActivityResult`方法接收结果。如果用户取消了拍照,`data`对象将为`null`;否则,可以从`data.getExtras()`中获取拍好的照片`Bitmap`:
```java
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == 1 && resultCode == RESULT_OK) {
if (data != null) {
Bundle extras = data.getExtras();
if (extras != null) {
Bitmap bitmap = extras.getParcelable("data");
// 这里可以对bitmap进行进一步处理,如显示到ImageView等
}
}
}
}
```
二、从图库选择图片
1. 打开图库:
要让用户从图库中选择图片,同样需要创建一个隐式Intent,但这次指定动作为`Intent.ACTION_GET_CONTENT`,并设置类型为图片:
```java
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("image/*");
startActivityForResult(intent, 2); // 2 作为请求码
```
2. 处理图片选择结果:
在`onActivityResult`中,可以获取到用户选择图片的`Uri`:
```java
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == 2 && resultCode == RESULT_OK) {
if (data != null) {
Uri selectedImageUri = data.getData();
// 可以使用这个Uri进行后续处理,如加载图片到ImageView等
}
}
}
```
三、裁剪选择的图片
从相机或图库获取的图片可能需要裁剪以适应特定的尺寸或比例。首先,我们需要将图片保存到本地,然后创建一个新的Intent启动裁剪应用:
1. 将Bitmap保存为文件并获取Uri:
```java
private Uri saveBitmap(Bitmap bitmap, String dirPath) {
File tmpDir = new File(Environment.getExternalStorageDirectory() + "/" + dirPath);
if (!tmpDir.exists()) {
tmpDir.mkdirs();
}
File imageFile = new File(tmpDir, "temp_image.jpg");
try {
FileOutputStream out = new FileOutputStream(imageFile);
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, out);
out.close();
} catch (IOException e) {
e.printStackTrace();
}
return Uri.fromFile(imageFile);
}
```
2. 启动图片裁剪:
创建一个显式Intent,使用`CropIntentProvider`类(通常自定义或使用第三方库如`android-crop`),指定输入Uri和裁剪后的输出Uri:
```java
Intent cropIntent = new Intent(this, CropImageActivity.class);
cropIntent.setDataAndType(selectedImageUri, "image/*");
cropIntent.putExtra(CropImageActivity.EXTRA_OUTPUT_URI, saveBitmap(bitmap, "CroppedImages"));
startActivityForResult(cropIntent, 3); // 3 作为裁剪请求码
```
3. 处理裁剪结果:
在裁剪完成后,从裁剪应用返回的结果中获取裁剪后的图片Uri,然后可以加载到应用中:
```java
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == 3 && resultCode == RESULT_OK) {
Uri croppedImageUri = data.getData();
// 加载裁剪后的图片到ImageView等
}
}
```
以上就是Android应用中实现拍照、从图库选择图片并进行裁剪的基本流程。实际开发时,可能还需要考虑权限管理、图片压缩、异常处理等细节问题。
2021-01-04 上传
2021-01-05 上传
2016-05-05 上传
2021-01-20 上传
2020-09-01 上传
2020-09-02 上传
161 浏览量
2020-09-03 上传
weixin_38717980
- 粉丝: 7
- 资源: 893
最新资源
- SSM动力电池数据管理系统源码及数据库详解
- R语言桑基图绘制与SCI图输入文件代码分析
- Linux下Sakagari Hurricane翻译工作:cpktools的使用教程
- prettybench: 让 Go 基准测试结果更易读
- Python官方文档查询库,提升开发效率与时间节约
- 基于Django的Python就业系统毕设源码
- 高并发下的SpringBoot与Nginx+Redis会话共享解决方案
- 构建问答游戏:Node.js与Express.js实战教程
- MATLAB在旅行商问题中的应用与优化方法研究
- OMAPL138 DSP平台UPP接口编程实践
- 杰克逊维尔非营利地基工程的VMS项目介绍
- 宠物猫企业网站模板PHP源码下载
- 52简易计算器源码解析与下载指南
- 探索Node.js v6.2.1 - 事件驱动的高性能Web服务器环境
- 找回WinSCP密码的神器:winscppasswd工具介绍
- xctools:解析Xcode命令行工具输出的Ruby库