### Android中从SD卡中拍照选择图片并进行剪裁的方法 #### 一、知识点概览 在Android开发中,从SD卡中选择照片并进行剪裁是一个常见的需求,尤其是在需要用户上传头像或特定格式图片的应用场景下。本文将详细介绍如何实现这一功能,包括拍照、选取相册中的图片以及对图片进行剪裁。 #### 二、核心概念解析 **1. 拍照** - **MediaStore.ACTION_IMAGE_CAPTURE**: 这是Android系统提供的一个Action,用于启动相机应用。 - **Intent**: 用于启动其他Activity或服务的一个类。 - **Extra**: Intent可以携带额外的数据,如`MediaStore.EXTRA_OUTPUT`用于指定图片保存的位置。 **2. 选取相册中的图片** - **ACTION_PICK**: 使用该Action可以打开系统图库,让用户选择一张图片。 **3. 图片剪裁** - **ACTION_CROP**: 通过这个Action可以调用系统剪裁工具,对选中的图片进行裁剪。 - **setDataAndType**: 设置数据类型,确保只能选择图片。 #### 三、实现步骤详解 **1. 创建必要的UI元素** 代码示例中的`PicCutActivity`包含了一个`ImageButton`(用于显示图片)和一个`Button`(用于触发操作)。这两个组件都绑定了点击事件。 **2. 初始化环境** - **检查权限**:首先需要检查应用是否具有读写SD卡的权限。这通常通过在AndroidManifest.xml文件中声明权限来实现。 ```xml <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> ``` - **初始化组件**:在`onCreate`方法中初始化UI组件,并设置点击监听器。 **3. 处理点击事件** - **展示对话框**:当用户点击按钮时,会弹出一个对话框供用户选择拍照或从相册选择图片。 - **拍照操作**: - 创建一个临时文件用于保存拍摄的照片。 - 通过Intent启动相机应用,并指定保存位置。 - 设置请求码`PHOTO_REQUEST_TAKEPHOTO`以便于处理返回结果。 - **选择图片操作**: - 使用`ACTION_PICK`启动图库应用。 - 设置请求码`PHOTO_REQUEST_GALLERY`以便于处理返回结果。 **4. 图片剪裁** - **启动剪裁工具**: - 在处理完拍照或选取图片的结果后,可以进一步调用系统剪裁工具。 - 使用`ACTION_CROP`启动剪裁Activity,并设置必要的参数,如剪裁尺寸等。 - 设置请求码`PHOTO_REQUEST_CUT`以便于处理返回结果。 - **处理剪裁结果**: - 在`onActivityResult`方法中处理剪裁后的图片。 - 将剪裁后的Bitmap对象加载到`ImageButton`中显示。 #### 四、代码示例分析 ```java File tempFile = new File(Environment.getExternalStorageDirectory(), getPhotoFileName()); ``` 这段代码创建了一个用于保存拍摄照片的临时文件。其中`getPhotoFileName()`应该是一个返回当前时间戳作为文件名的方法,例如: ```java private String getPhotoFileName() { SimpleDateFormat sdf = new SimpleDateFormat("'IMG'_yyyyMMdd_HHmmss"); Date date = new Date(); return sdf.format(date) + ".jpg"; } ``` **5. 处理结果** - 在`onActivityResult`方法中处理拍照或选取图片的结果,如果成功,则进一步调用剪裁工具。 - 如果剪裁成功,获取剪裁后的图片并显示在界面上。 #### 五、总结 本文介绍了在Android应用中实现从SD卡中拍照选择图片并进行剪裁的方法。通过上述步骤,开发者可以轻松地在自己的应用中集成这一功能,提高用户体验。需要注意的是,在实际开发过程中还需考虑权限管理、异常处理等问题,以确保应用的稳定性和安全性。
- younger_style2014-01-25敢不敢 抄别人的 至少弄个工程 还是个txt 坑
- sheep2081455762013-07-29很好可以使用
- s00102015-01-15代码很好,注释的蛮详细的,谢谢
- huluoboyou2013-01-21很好啊,。代码很详细
- tomguan2013-10-14还不错。下载来改改就好了
- 粉丝: 1
- 资源: 12
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助