Camera 使用记录
来源:互联网 发布:服装尺码对照表软件 编辑:程序博客网 时间:2024/06/08 11:50
android camera介绍
android手机关于Camera的使用,一是拍照,二是摄像,由于Android提供了强大的组件功能,为此对于在Android手机系统上进行Camera的开发,我们可以使用两类方法:一是借助Intent和MediaStroe调用系统Camera App程序来实现拍照和摄像功能,二是根据Camera API自写Camera程序。由于自写Camera需要对Camera API了解很充分,而且对于通用的拍照和摄像应用只需要借助系统Camera App程序就能满足要求了。
在AndroidMainfest.xml中声明使用照相机.
<uses-permission android:name="android.permission.CAMERA" /> <uses-feature android:name="android.hardware.camera" /> <uses-feature android:name="android.hardware.camera.autofocus" /> <uses-permission android:name="android.permission.RECORD_AUDIO" /> <uses-permission android:name="android.permission.RECORD_VIDEO" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
调用系统相机进行拍照或拍摄
构造一个Camera Intent -- 创建一个拍摄照片或者视频的Intent, 我们可以使用如下两种方法:
MediaStore.ACTION_IMAGE_CAPTURE -- 一个intent action,用来向系统Camera程序请求拍摄图片。
MediaStore.ACTION_VIDEO_CAPTURE -- 一个intent action, 用来向系统Camera程序请求录制视频。
MediaStore.EXTRA_OUTPUT -- 指定一个Uri对象,系统Camera程序会把拍摄的图片存储到指定位置。
MediaStore.EXTRA_VIDEO_QUALITY -- 视频质量,0(低质量,比较小的文件来存储视频), 1(高质量,比较大的文件来存储视频)
MediaStore.EXTRA_DURATION_LIMIT -- 设置一个值来限制视频时间长度,秒为单位。
MediaStore.EXTRA_SIZE_LIMIT -- 设置一个值来限制视频大小,byte为单位。
MediaStore.ACTION_IMAGE_CAPTURE -- 一个intent action,用来向系统Camera程序请求拍摄图片。
MediaStore.ACTION_VIDEO_CAPTURE -- 一个intent action, 用来向系统Camera程序请求录制视频。
MediaStore.EXTRA_OUTPUT -- 指定一个Uri对象,系统Camera程序会把拍摄的图片存储到指定位置。
MediaStore.EXTRA_VIDEO_QUALITY -- 视频质量,0(低质量,比较小的文件来存储视频), 1(高质量,比较大的文件来存储视频)
MediaStore.EXTRA_DURATION_LIMIT -- 设置一个值来限制视频时间长度,秒为单位。
MediaStore.EXTRA_SIZE_LIMIT -- 设置一个值来限制视频大小,byte为单位。
拍照示例代码:
<pre name="code" class="java">// create Intent to take a picture and return control to the calling applicationIntent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); Uri fileUri = getOutputMediaFileUri(MEDIA_TYPE_IMAGE); // create a file to save the image intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri); // set the image file name // start the image capture Intent startActivityForResult(intent, CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE);
Intent intent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 1);startActivityForResult(intent, 1);
自定义预览流程
private void initSurfaceView() {this.mSurfaceview = ((SurfaceView) findViewById(R.id.surface_camera));this.mSurfaceHolder = this.mSurfaceview.getHolder();this.mSurfaceHolder.setFormat(-3);this.mSurfaceHolder.setType(3);this.mSurfaceHolder.addCallback(this);}
@Overridepublic void surfaceCreated(SurfaceHolder holder) {this.mCamera = Camera.open();try {this.mCamera.setPreviewDisplay(this.mSurfaceHolder);this.mCamera.setPreviewCallback(this.mPreviewCallback);} catch (Exception localException) {while (true) {if (this.mCamera != null) {this.mCamera.release();this.mCamera = null;}}}}private void initCamera() {Camera.Parameters localParameters = this.mCamera.getParameters();localParameters.setPictureFormat(256);localParameters.setPreviewFormat(17); localParameters.setPreviewSize(mPreviewWidth,mPreviewHeight);localParameters.setPictureSize(mPreviewWidth, mPreviewHeight);localParameters.setPreviewFrameRate(15);this.mCamera.setParameters(localParameters);this.mCamera.startPreview();}@Overridepublic void surfaceDestroyed(SurfaceHolder holder) {if (this.mCamera != null) {this.mCamera.setPreviewCallback(null);this.mCamera.stopPreview();this.bIfPreview = false;this.mCamera.release();this.mCamera = null;}}
// 提供一个静态方法,用于根据手机方向获得相机预览画面旋转的角度 public static int getPreviewDegree(Activity activity) { // 获得手机的方向 int rotation = activity.getWindowManager().getDefaultDisplay() .getRotation(); int degree = 0; // 根据手机的方向计算相机预览画面应该选择的角度 switch (rotation) { case Surface.ROTATION_0: degree = 90; break; case Surface.ROTATION_90: degree = 0; break; case Surface.ROTATION_180: degree = 270; break; case Surface.ROTATION_270: degree = 180; break; } return degree; }
获取预览画面数据
mCamera.setPreviewCallback(this.mPreviewCallback);
private Camera.PreviewCallback mPreviewCallback = new Camera.PreviewCallback() {public void onPreviewFrame(byte[] paramAnonymousArrayOfByte,Camera paramAnonymousCamera) {if (mEncoding) {mInstance0.rtmpInput(paramAnonymousArrayOfByte);}}};
拍照及处理事件
camera.takePicture(null, null, new MyPictureCallback());
private final class MyPictureCallback implements PictureCallback { @Override public void onPictureTaken(byte[] data, Camera camera) { try {
<span style="white-space:pre"></span>//处理data数据 camera.startPreview(); // 拍完照后,重新开始预览 } catch (Exception e) { e.printStackTrace(); } } }
0 0
- Camera 使用记录
- Picasso使用问题记录 - 加载local camera image 失败
- AR Camera开发记录(一) -- Rajawali的使用
- camera调试记录
- camera调试记录
- Freescale camera 处理记录
- Camera APP问题记录
- Camera--V4L2驱动学习记录
- Camera--V4L2驱动学习记录
- MTK camera 效果调试记录
- Camera--V4L2驱动学习记录
- Android Camera 的学习记录
- [笔记分享] [Camera] msm8x25 camera hal 流程记录
- 使用Camera API
- 使用Camera API
- Android Camera 使用小结
- Android Camera 使用小结
- Android Camera 使用小结
- 2015-1-22【erlang】Cowboy学习记录-关于Routing章节
- 初学51单片机指令快速记忆法
- ubuntu使用中出现的问题及解决方法
- 寒假项目1-动态链表体验(改造)(4)
- quick 3.3final 新建工程打包build_native报错
- Camera 使用记录
- 第一代程序猿王小波
- Hello, World!
- iOS-iPhone开发之判断当前的网络状态
- 访问者模式
- Windows 平台上的使用 Python 语言实现 appium 自动化程序 for Android(完整版)
- php js传参
- msvcrtd.lib(crtexew.obj) : error LNK2001: unresolved external symbol _WinMain@16
- 1021. 个位数统计