
Android拍照功能实现获取高清图片与缩略图

在Android开发中,获取拍照后的图片是一个常见的功能需求。这通常涉及到Android系统的照相机应用的调用,以及在拍照后对图片数据的处理。开发者可以利用Android提供的Intent系统和相关的API来实现这一功能。下面将详细介绍如何在Android平台使用Google代码示例来获取拍照后的图片,包括获取高清图片和缩略图的过程。
### 1. AndroidManifest.xml配置
首先,为了能够使用系统相机应用拍照,需要在`AndroidManifest.xml`文件中添加相应的权限。通常需要以下权限声明:
```xml
<uses-permission android:name="android.permission.CAMERA"/>
<uses-feature android:name="android.hardware.camera" android:required="true"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
```
其中`android.permission.CAMERA`是用来声明应用需要访问设备的摄像头的权限,`android.hardware.camera`声明应用需要摄像头硬件特性,而`android.permission.WRITE_EXTERNAL_STORAGE`是拍照保存图片到外部存储时所需的权限。
### 2. 调用系统相机拍照
通常在Activity中通过Intent调用系统的相机应用。代码示例如下:
```java
private static final int REQUEST_IMAGE_CAPTURE = 1;
public void dispatchTakePictureIntent() {
Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
if (takePictureIntent.resolveActivity(getPackageManager()) != null) {
startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE);
}
}
```
调用`startActivityForResult`后,如果用户拍摄了照片并返回,系统会调用`onActivityResult`方法。在这里,我们需要处理返回的图片数据。
### 3. 获取拍照后的图片数据
在`onActivityResult`方法中,可以通过返回的Intent对象获取到图片的`Bitmap`对象。
```java
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK) {
Bundle extras = data.getExtras();
Bitmap imageBitmap = (Bitmap) extras.get("data");
// 使用imageBitmap进行后续处理
}
}
```
上面的代码中`"data"`键对应的值是一个`Bitmap`对象,即拍照生成的缩略图。如果需要获取原始图片,通常需要将图片保存到文件系统,然后通过文件路径来获取。
### 4. 保存图片到文件系统
为了获取高清图片,需要在调用`startActivityForResult`之前,创建一个用于保存图片的文件,并指定一个文件URI。
```java
public void dispatchTakePictureIntent() {
Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
// 确保有应用可以处理这个Intent
if (takePictureIntent.resolveActivity(getPackageManager()) != null) {
// 创建文件以存储图片
File photoFile = null;
try {
photoFile = createImageFile();
} catch (IOException ex) {
// 错误处理...
}
// 继续只有文件可用...
}
}
private File createImageFile() throws IOException {
// 创建一个唯一的文件名
String imageFileName = "JPEG_" + System.currentTimeMillis() + "_";
File storageDir = getExternalFilesDir(Environment.DIRECTORY_PICTURES);
File image = File.createTempFile(
imageFileName, /* 前缀 */
".jpg", /* 后缀 */
storageDir /* 目录 */
);
// 保存图片路径的URI
currentPhotoPath = image.getAbsolutePath();
return image;
}
```
接着需要将这个文件的URI传递给Intent。
```java
takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(photoFile));
```
当用户拍照完成后,照片将自动保存到指定的文件路径。然后开发者可以基于这个文件路径处理高清图片数据。
### 5. 使用MediaStore获取缩略图
如果需要获取图片的缩略图,可以在调用`dispatchTakePictureIntent`之前,从`MediaStore`查询。这里通常需要查询图片的ID,然后通过ID获取图片的缩略图。
```java
Cursor cursor = getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
new String[]{MediaStore.Images.Media._ID}, // 只需要图片ID
null, null, null);
if (cursor != null && cursor.moveToFirst()) {
long id = cursor.getLong(cursor.getColumnIndex(MediaStore.Images.Media._ID));
Uri imageUri = ContentUris.withAppendedId(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, id);
// 使用imageUri获取缩略图,例如通过MediaStore的thumbnail
}
cursor.close();
```
### 6. 综合处理
在实际应用中,获取图片后还需要进行图片的显示、分享、上传等操作。这可能涉及到Android的`ImageView`控件、图片裁剪、文件传输等更高级的操作。开发者需要根据具体需求进行相应的开发。
### 总结
在Android平台上获取拍照后的图片,实际上涉及到Android系统的多个组件和API的协同工作。以上介绍涵盖了从权限声明、启动系统相机、获取返回的图片数据、保存图片到文件系统以及获取缩略图的基本步骤。在具体实现中,开发者需要关注Android不同版本的兼容性问题以及用户的隐私权限处理,确保应用的健壮性和用户体验。
相关推荐



















黑卡米
- 粉丝: 567
最新资源
- 江西财经大学MBA教育中心源码资料下载
- 自助工资动网论坛插件使用教程及文件说明
- WinCE触控屏驱动源代码开发详解
- QLDBGrid组件增强版发布:更多财务与交互功能
- MiniPlayer源代码分析与Windows编程实践
- 学习JSP进销存管理系统,简易开源代码分析
- 快速部署短信系统:宇讯短信二次开发平台介绍
- 中国FLASH联盟发布新版动画管理系统
- Dvbbs 6.0版管理员登录验证码图片转换插件使用指南
- DBTreeView控件:数据库树形结构显示与扩展属性
- MM qq2003整站程序正式发布:在线修改与管理功能
- 基于JSP的网络餐馆点菜管理系统
- 思想阅读者游戏:探索游戏编程的奥秘
- 校园青春FLASH程序:精美前台与完善后台功能
- ZZShop v1.0:强大的CMS+商店程序,后台管理与静态页生成
- 魔法老师主题时钟:创意时间管理工具
- ExpressGrid5源码资源下载与安装指南
- 新磁场免维护版FLASH与MTV在线欣赏
- 掌握多媒体技术,高效制作PPT教程
- 泡泡龙游戏插件轻松集成DVBBS 6.0
- GNU协议下的MPEG4播放器PLAYA源代码解析
- 西?跳蚤市场繁体版 - 二手拍卖程序
- eWebEditor v3.7 优化增强版:爱雪儿工作室深度定制
- VC程序中内联汇编技术的实践与应用