Android Camera之

编程入门 行业动态 更新时间:2024-10-11 09:23:23

<a href=https://www.elefans.com/category/jswz/34/1771384.html style=Android Camera之"/>

Android Camera之

Camera API 介绍系列文章:

Android Camera之 --- Camera API说明(一)

Android Camera之 --- Camera API说明(二)

Android Camera之 --- Camera API说明(三)



推荐大家浏览Android源码最便利的方法:

/


从Android5.0开始google引入新的Camera API,位于:.0.0_r2/xref/frameworks/base/core/java/android/hardware/camera2/

后续我会写几篇关于Camera2 API的分析文章。


Android Camera API说明:

Camera API基本上有三大功能,预览;拍照;录像,所有对Camera API的调用基本上就是围绕这三种功能来进行的。

Android Camera API 实现位于/frameworks/base/core/java/android/hardware/Camera.java


首先,在开发Camera相关APP时需要在AndroidManifest.xml中申请camera使用权限以及其他有关camera的feature,如:

uses-permission android:name="android.permission.CAMERA"
uses-feature android:name="android.hardware.camera"
uses-feature android:name="android.hardware.camera.autofocus"


预览操作:

1. 通过调用open()或者open(int cameraId)来获取Camera实例;

2. 通过调用getParameters()来获取camera默认的参数集;

3. 根据需要通过Parameters封装的函数来更改必要的参数;

4. 设置参数调用setParameters(Camera.Parameters);

5. 必须调用setPreviewDisplay(SurfaceHolder)来设置预览图像的显示,若没有Surface,camera不能开始预览;

6. 调用startPreview()来开始预览;

7. 想要停止预览则调用stopPreview();


拍照操作:

1. 确保camera已经在预览模式;

2. 调用takePicture(Camera.ShutterCallback, Camera.PictureCallback, Camera.PictureCallback, Camera.PictureCallback)来拍照;

3. 等待takePicture()函数设置的callback返回图片数据;

4. 当takePicture()函数被调用后,预览画面就会停止,想要继续预览或者拍照,则必须调用startPreview()开始预览;


视频录制操作:

1. 确保Camera已经在预览模式;

2. 调用unlock()通知cameraserver允许mediaserver进程访问Camera;

3. 调用MediaRecorder初始化MediaRecorder实例并设置相应的音频视频参数;

4. 调用MediaRecorder.setCamera(Camera)接口将此camera实例做为video datasource;

5. 调用MediaRecorder相关的函数进行视频录制;

6. 结束视频录制也是由MediaRecorder相关的函数来控制;

7. 调用reconnect()接口来对camera实例重新上锁;


介绍完大致的操作步骤后首先对Camera的内部类进行说明:

public static class CameraInfo {public static final int CAMERA_FACING_BACK = 0;              // 在屏幕的相反侧,也就是代表后置摄像头public static final int CAMERA_FACING_FRONT = 1;             // 在屏幕的同侧,代表前置摄像头       public int facing;                                           // 上面定义的两选其一,代表次摄像头的相对位置public int orientation;                                      // 相机的转角,一般有0,90,180,270.public boolean canDisableShutterSound;                       // 是否支持拍照关闭声音
};


若要想Camera参数设置生效,则必须调用Camera.setParameters(Camera.Parameters)接口来设置修改后的Camera参数集。例如:

当调用Camera.Parameters.setWhiteBalance()时,并不能让WB生效,必须通过调用Camera.setParameters(Camera.Parameters)来让修改后的参数集设置生效;不同的硬件有不同的参数功能,比如所支持的preview size和flash mode都是有所不同的,使用者必须首先获取所支持的参数信息,进一步根据所支持的信息来设置相应的参数。下面介绍camera的参数集Camera.Parameters内部类:

    @Deprecatedpublic class Parameters {// 从下面的定义可以看出每一个参数都是通过key-value来存储的,代表了camera硬件设备的特性和性能,也有一部分是作为设置参数存在的// Parameter keys to communicate with the camera driver.// 预览画面大小,一般有默认值,可以通过调用getPreviewSize()来获取默认值,// 使用者调用getSupportedPreviewSizes()获取所支持的preview size,进而调用setPreviewSize(int width, int height)来设置预览大小;private static final String KEY_PREVIEW_SIZE = "preview-size";// previewCallback()返回数据格式,可以通过调用getPreviewFormat()来获取默认值,// 使用者调用getSupportedPreviewFormats()获取所支持的颜色格式,进而调用setPreviewFormat(int pixel_format)来设置callback数据格式;private static final String KEY_PREVIEW_FORMAT = "preview-format";// 预览帧率,使用者调用getPreviewFrameRate()来获取默认的预览帧率,// 使用者可以通过getSupportedPreviewFrameRates()来获取所支持的预览帧率,进而调用private static final String KEY_PREVIEW_FRAME_RATE = "preview-frame-rate";// 用来替代KEY_PREVIEW_FRAME_RATE而设置的,因为camera设备的帧率是不固定的,根据光照条件的差异,曝光时间是不同的,若想得到较好的图像质量,// 则必须牺牲帧率,所以此处的预览帧率是一个范围,有最大值和最小值之分,可以通过getPreviewFpsRange(int[] range)来获取默认值,// getSupportedPreviewFpsRange()来获取所支持的预览帧率范围,进而通过setPreviewFpsRange(int min, int max)来设置预览帧率范围,private static final String KEY_PREVIEW_FPS_RANGE = "preview-fps-range";// 拍照图片大小,可以通过getPictureSize()来获取默认值,// 使用者getSupportedPictureSizes()来获取所支持的拍照图片大小,进而通过setPictureSize(int width, int height)来设置拍照图片大小private static final String KEY_PICTURE_SIZE = "picture-size";// 拍照图像格式,可以通过getPictureFormat()来获取默认的拍照图片格式,// 使用者通过getSupportedPictureFormats()来获取所支持的拍照图片格式,进而通过setPictureFormat(int pixel_format)来设置拍照图片格式private static final String KEY_PICTURE_FORMAT = "picture-format";// 获取所支持的拍照Thumbnail大小,分别为width和heightprivate static final String KEY_JPEG_THUMBNAIL_SIZE = "jpeg-thumbnail-size";// 拍照Thumbnail宽度,通过getJpegThumbnailSize()获取,通过setJpegThumbnailSize(int width, int height)来设置private static final String KEY_JPEG_THUMBNAIL_WIDTH = "jpeg-thumbnail-width";// 拍照Thumbnail高度,通过getJpegThumbnailSize()获取,通过setJpegThumbnailSize(int width, int height)来设置private static final String KEY_JPEG_THUMBNAIL_HEIGHT = "jpeg-thumbnail-height";// EXIF Thumbnail 图像质量级别[0~100], 100为最佳图像质量,// 可通过getJpegThumbnailQuality()和setJpegThumbnailQuality(int quality)来获取和设置Thumbnail图像的质量;private static final String KEY_JPEG_THUMBNAIL_QUALITY = "jpeg-thumbnail-quality";// 拍照图片JPEG图像质量, 通过setJpegQuality(int quality)和getJpegQuality()来设置或获取图片质量private static final String KEY_JPEG_QUALITY = "jpeg-quality";// 设置图像旋转角度,0,90,180,270.private static final String KEY_ROTATION = "rotation";// GPS纬度信息,用于拍照private static final String KEY_GPS_LATITUDE = "gps-latitude";// GPS经度信息,用于拍照private static final String KEY_GPS_LONGITUDE = "gps-longitude";// GPS海拔信息,用于拍照private static final String KEY_GPS_ALTITUDE = "gps-altitude";// GPS时间信息,用于拍照private static final String KEY_GPS_TIMESTAMP = "gps-timestamp";// GPS信息处理方式,用于拍照private static final String KEY_GPS_PROCESSING_METHOD = "gps-processing-method";// 相机WB模式,可通过getSupportedWhiteBalance()来获取所支持的模式,// 模式有:AUTO,INCANDESCENT,FLUORESCENT,WARM_FLUORESCENT,DAYLIGHT,CLOUDY_DAYLIGHT,TWILIGHT,SHADE,// 通过String getWhiteBalance()和setWhiteBalance(String value)来获取或设置WB模式private static final String KEY_WHITE_BALANCE = "whitebalance";// 预览色彩效果,可通过getSupportedColorEffects()获取所支持的色彩效果,// 色彩效果有NONE,MONO,NEGATIVE,SOLARIZE,SEPIA,POSTERIZE,WHITEBOARD,BLACKBOARD,AQUA,// 通过getColorEffect()和setColorEffect(String value)来获取和设置色彩效果private static final String KEY_EFFECT = "effect";// antibanding 模式, 可以通过getSupportedAntibanding()来获取所支持的antibanding,// Antibanding模式有:AUTO,50HZ,60HZ,OFF// 可以通过getAntibanding()和setAntibanding(String antibanding)来获取或者设置Antibanding模式,private static final String KEY_ANTIBANDING =

更多推荐

Android Camera之

本文发布于:2024-03-10 13:24:20,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1728092.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:Android   Camera

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!