转自: http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/0428/2811.html
概要
从5.0开始(API Level 21),可以完全控制安卓设备相机的新api Camera2(android.hardware.Camera2)被引入了进来。在以前的Camera api(android.hardware.Camera)中,对相机的手动控制需要更改系统才能实现,而且api也不友好。不过老的Camera API在5.0上已经过时,在未来的app开发中推荐的是Camera2 API。
L版本之前的Camera API
有限的图片数据流获取方式
有限相机状态信息
没有手动捕获控制
Camera2 API 新特性
支持30fps的全高清连拍 | Supports 30fps full resolution with burst mode |
支持帧之间的手动设置 | Supports change on manual camera settings between frame capture |
支持RAW格式的图片拍摄 | Supports RAW image capture |
支持快门0延迟以及电影速拍 | Supports Zero Shutter Lag & Movie Snapshot |
支持相机其他方面的手动控制包括噪音消除的级别 | Supports setting other manual camera device controls including level of Noise Cancelling |
Resolution
相机的基本使用被分成了5个主要部分()(CameraManager,CameraDevice,CameraCaptureSession,CaptureRequest,CaptureResult)
CameraManager | 提供构建,列出以及链接相机设备的接口 http://developer.android.com/reference/android/hardware/camera2/CameraManager.html |
CameraDevice | 代表和安卓设备相连的单个相机 http://developer.android.com/reference/android/hardware/camera2/CameraDevice.html |
CameraCaptureSession | 提供一套输出目标的surface(TextureView,MediaRecorder,MediaCodec,ImageReader,RenderScriptAllocation)。 http://developer.android.com/reference/android/hardware/camera2/CameraCaptureSession.html |
CaptureRequest | Settings and outputs needed to capture a single image from the camera device TEMPLATE_STILL_CAPTURE, TEMPLATE_VIDEO_SNAPSHOT, TEMPLATE_MANUAL) |
CaptureResult | 从图像传感器获得的单个图片拍摄的结果。 更详细的内容,需要通读Camera2包的概要介绍页 还有一个YouTube上的谷歌开发者的介绍视频,解释了Camera2 API的改动:DevBytes:Android L开发者预览之- Camera2 API https://www.youtube.com/watch?v=Xtp3tH27OFs |
检查那些特性可用
在安卓设备上,Camera2 API的所有特性并不都总是可用。取决于设备本身。为了检查那些特性可用,可以使用CameraCharacteristics来获得支持情况。
characteristics.get(CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL);
返回的结果分为级别的相机功能,按照 全支持> 有限支持> 看心情赠送的顺序排列:
INFO_SUPPORTED_HARDWARE_LEVEL_FULL
全方位的硬件支持,允许手动控制全高清的摄像。如果返回的是这个,连拍模式以及其他新特性都是可用的。
https://developer.android.com/reference/android/hardware/camera2/CameraCharacteristics.html#INFO_SUPPORTED_HARDWARE_LEVEL
INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED
一个“有限支持”的设备可能有一些或者没有“全支持”设备的特性。有些特性可能不属于任何硬件级别,需要单独查询。
https://developer.android.com/reference/android/hardware/camera2/CameraCharacteristics.html#INFO_SUPPORTED_HARDWARE_LEVEL
INFO_SUPPORTED_HARDWARE_LEVEL_LEGACY
所有的设备都会有的特性。这和过时的Camera API所支持的特新是一样的。
https://developer.android.com/reference/android/hardware/camera2/CameraCharacteristics.html#INFO_SUPPORTED_HARDWARE_LEVEL
虽然推荐在未来的app中使用Camera2 API,但是只有Lollipop的设备商才可用,也不大可能会出现兼容老设备的包。因此在最小版本(minSdkVersion)升到21之前,你还是需要继续使用Camera API(android.hardware.Camera)。
不过你可以用下面的代码对不同的版本区别对待:
1 if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) { 2 // your code using Camera API here - is between 1-20 3 } else if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { 4 // your code using Camera2 API here - is api 21 or higher 5 }
实例程序
最后,在网上发现几个使用Camera API2开发的实例程序,总结一下方便后续参考:
1.Camera2 Basic : https://github.com/googlesamples/android-Camera2Basic
演示如何使用Camera2 API基本功能的demo。你可以从中学会如何遍历相机设备的所有特性,显示预览照片,以及拍照。
2.Camera2 Video:https://github.com/googlesamples/android-Camera2Video
这个demo演示如何使用Camera2 API录制视频。
3.Camera2 master: http://www.eyesourcecode.com/thread-35378-1-1.html
使用Android L Camera2 API开发的示例应用程序,具备拍照,AWB,Flash,连拍功能
4.LCamerahttp://www.eyesourcecode.com/thread-35377-1-1.html
L Camera是一个开源的实验性质的Camera应用程序,基于Android L提供的新API android.hardware.camera2,目前只支持在Andorid 5.0 Lollipop版本的Nexus 5和Nexus 6上运行
> 本站内容系网友提交或本网编辑转载,其目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请及时与本网联系,我们将在第一时间删除内容!
-
调用系统Camera App实现拍照和摄像功能,虽然能够满足我们的一些需求,但自由度降低了,而且拍照的界面就是系统的样子,现在很多拍照程序,就需要根据SDK提供的Camera API来编写自己的程序. 一. 准备工作 如果要使用Camera API实现拍照或者照相功能,就必须在manifest内声明使用权限,通常由以下三项 & ...
-
steps to follow to create your own camera using camera API, 1. add permission to AndroidManifest.xml to get the camera hardware resource and save picture into SD card, <uses-per ...
-
使用ionic开发一款android或ios应用,估计少不了使用到Camera API,这里记录下使用过程. 创建空的ionic应用 ionic start myTabs tabs 通过cd demo命令,可以看到已经为我们创建了多个文件夹,如下所示: ls -l total 48 -rw-r--r-- 1 nancy staff 2786 6 5 01:1 ...
-
在前面的文章"如何在QML中使用camera API来拍照"中,我们介绍了如何使用Camera API来进行拍照.今天我们在这篇文章中来介绍如何使用Camera API来进行录像. 首先,还是和以前一样,我直接把自己的代码贴出来: main.qml import QtQuick 2.0 import Ubuntu.Components 1 ...
-
在先前的例程中"如何使用Ubuntu手机平台中的照相机API来存储照片",我们已经展示了如何使用Item的属性来存储我们的照片.在这篇文章中,我们将使用Camera API来完成同样的功能. 我们来直接贴自己的代码: main.qml import QtQuick 2.0 import Ubuntu.Components 1.1 impo ...
-
(一) 前言最近看Camera的api,觉得写的真的不错.现在翻译过来,给大家分享分享,译文可能不太好,大家将就着看哈.(二) 正文1. CameraCamera是Android framework里面支持的,允许你拍照和拍摄视频的设备,那么,本文在接下来就会讨论如何为你的用户提供快速,简单的图片和视频拍摄方法.2. 注意事项a. 在确定你的程序使用Came ...
-
1. add below three permission into AndroidManifest.xml file <uses-permission android:name= "android.permission.CAMERA" /> <uses-permission android:name= "an ...
-
工作中遇到需要自定义拍照的需求,然后就碰到预览时图像变形的问题,从网络上找到一些参考,综合一下解决了问题,记录一下.顺便希望有人可以一起讨论一下系统拍照程序的实现.我不知道源码里面是怎么实现的,因为下载的源码一直没看,甚至编译不出镜像文件.每天工作十几个小时,暂时实在没精力继续下去,而且老罗列出的读Android源码前需要看的书也没看完.终于有点时间整理下工 ...