拍照-----------android系统 至关重要的功能
2014-07-23 21:01
323 查看
一 在Android 中,拍照对应的Action 是android.provider.MediaStore.ACTION_IMAGE_CAPTURE. 用于拍照的Activity 需要返回照片图像数据,
摄像对应的Action 是android.provider.MediaStore.ACTION_VIDEO_CAPTURE
因此需要使用startActivityForResult()来启动 Activity .代码如下:
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent,1);
截获 Activity 返回的图像数据的事件方法是onActivityResult ,代码如下:
protected void onActivityResult(int requestCode, int resultCode, Intent data){
if(requestCode == 1){
if(resultCode == Activity.RESULT_OK){
Bitmap bitmap = (Bitmap)data.getExtras().get("data"); // 拍照 Activity 保存图像数据的 key 是 data,返回的数据类型是 Bitmap 对象
imageView.setImageBitmap(bitmap); // 在 ImageView 组件中显示拍摄的照片
}
}
super.onActivityResult(requestCode, resultCode, data);
}
系统拍照功能 具体代码请参见 ch14_systemcamera 工程
注意: 使用系统的拍照 通常很难拍摄大辨率的照片,但可以生成分辨率更小的照片.通过insertImage 方法可以同时在 /sdcard/DCIM/.thumbnails 和 /sdcard/DCIM/Camera 目录中分别生成分辨率为 50 X 50 和 208 X 312的图像, 代码如下:
MediaStore.Images.Media.insertImage(getContentResolver(), cameraBitmap,null,null);
其中 cameraBitmap 是拍照 Activity 返回的 Bitmap对象
二 实现用户自定义拍照 Activity
拍照的核心类是 android.hardware.Camera,通过Camera类的静态 open 可以获得Camera对象,并通过Camera 类的startPreview 方法开始拍照,最后通过Camera 类的takePicture 方法结束拍照,并在相应的事件中处理照片数据
具体步骤如下:
1 指定用于显示拍照过程影像的容器,通常是SurfaceHolder 对象。
2 在拍照过程中涉及到一些状态的变化: 这些状态包括开始拍照(对应surfaceCreated 事件方法);拍照状态变化(对应surfaceChanged 事件方法); 结束拍照(对应surfaceDestroyed 事 件 方法)。这3个方法都是在SurfaceHolder.Callback 接口中定义的, 因此,需要使用SurfaceHolder 接口的addCallback 方法指定 SurfaceHolder.Callback 对象,以便实现这3种方法
3 拍完照后需要处理照片数据。处理这些数据的工作需要在PictrueCallback 接口的onPictureTaken方法中完成。当调用Camera 类的takePicture 方法后,onPictureTaken 方法被调 用.
4 如果需要自动对焦,需要调用Camera 类的 autoFocus 方法.该方法需要一个 AutoFocusCallback 类型的参数值. AutoFocusCallback 是一个接口,在该接口中定义了一个onAutoFocus 方法,当摄像头正在对焦或对焦成功都会调用该方法.
具体代码请参见 ch14_camera工程
特别注意: 用户自定义的拍照功能必须声明权限 <uses-permission android:name="android.permission.CAMERA" /> ,但在调用系统提供的拍照功能时并不需要声明!
/article/1410599.html
摄像对应的Action 是android.provider.MediaStore.ACTION_VIDEO_CAPTURE
因此需要使用startActivityForResult()来启动 Activity .代码如下:
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent,1);
截获 Activity 返回的图像数据的事件方法是onActivityResult ,代码如下:
protected void onActivityResult(int requestCode, int resultCode, Intent data){
if(requestCode == 1){
if(resultCode == Activity.RESULT_OK){
Bitmap bitmap = (Bitmap)data.getExtras().get("data"); // 拍照 Activity 保存图像数据的 key 是 data,返回的数据类型是 Bitmap 对象
imageView.setImageBitmap(bitmap); // 在 ImageView 组件中显示拍摄的照片
}
}
super.onActivityResult(requestCode, resultCode, data);
}
系统拍照功能 具体代码请参见 ch14_systemcamera 工程
注意: 使用系统的拍照 通常很难拍摄大辨率的照片,但可以生成分辨率更小的照片.通过insertImage 方法可以同时在 /sdcard/DCIM/.thumbnails 和 /sdcard/DCIM/Camera 目录中分别生成分辨率为 50 X 50 和 208 X 312的图像, 代码如下:
MediaStore.Images.Media.insertImage(getContentResolver(), cameraBitmap,null,null);
其中 cameraBitmap 是拍照 Activity 返回的 Bitmap对象
二 实现用户自定义拍照 Activity
拍照的核心类是 android.hardware.Camera,通过Camera类的静态 open 可以获得Camera对象,并通过Camera 类的startPreview 方法开始拍照,最后通过Camera 类的takePicture 方法结束拍照,并在相应的事件中处理照片数据
具体步骤如下:
1 指定用于显示拍照过程影像的容器,通常是SurfaceHolder 对象。
2 在拍照过程中涉及到一些状态的变化: 这些状态包括开始拍照(对应surfaceCreated 事件方法);拍照状态变化(对应surfaceChanged 事件方法); 结束拍照(对应surfaceDestroyed 事 件 方法)。这3个方法都是在SurfaceHolder.Callback 接口中定义的, 因此,需要使用SurfaceHolder 接口的addCallback 方法指定 SurfaceHolder.Callback 对象,以便实现这3种方法
3 拍完照后需要处理照片数据。处理这些数据的工作需要在PictrueCallback 接口的onPictureTaken方法中完成。当调用Camera 类的takePicture 方法后,onPictureTaken 方法被调 用.
4 如果需要自动对焦,需要调用Camera 类的 autoFocus 方法.该方法需要一个 AutoFocusCallback 类型的参数值. AutoFocusCallback 是一个接口,在该接口中定义了一个onAutoFocus 方法,当摄像头正在对焦或对焦成功都会调用该方法.
具体代码请参见 ch14_camera工程
特别注意: 用户自定义的拍照功能必须声明权限 <uses-permission android:name="android.permission.CAMERA" /> ,但在调用系统提供的拍照功能时并不需要声明!
/article/1410599.html
相关文章推荐
- 拍照-----------android系统 至关重要的功能
- android调用系统相机实现拍照功能
- android调用系统相机实现拍照功能
- Android系统中拍照功能的调用
- Android 调用系统的拍照与裁剪功能
- Android 实现调用系统照相机拍照和录像的功能
- android调用系统相机实现拍照功能
- Android调用系统相机拍照,并且模仿实现水印相机简单功能
- Android----Intent,运用由android系统帮助匹配实现打电话、发送短信、打开网页、播放音乐、打开视频、打开图片、安装APK、通知栏消息、拍照上传头像等功能
- Android学习之调用系统相机实现拍照功能
- Android学习之调用系统相机实现拍照功能
- Java乔晓松-android中调用系统拍照功能并显示拍照的图片
- 文件件监听器,android系统拍照功能调用后删除系统生成的照片
- Android调用系统相机拍照,并且模仿实现水印相机简单功能
- Android拍照和相册+系统裁剪功能返回图片
- android调用系统相机实现拍照功能
- android调用系统相机实现拍照功能
- Java乔晓松-android中调用系统拍照功能并显示拍照的图片
- android调用系统相机实现拍照功能
- Android使用系统自带的相机实现一键拍照功能