Camera2之拍照
Android框架包括支持各种相机和相机的特性 设备,允许您捕获照片和视频在您的应用程序。 本文讨论了 快速、简单的图像和视频捕获方法,并概述了一个先进的方法来创建 为用户自定义相机的经验。
1.在清单文件中声明
权限
<uses-permission android:name="android.permission.CAMERA" />
如果保存照片,录视频还要添加两个权限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
相机功能:相机的特性,例如
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />
还有很多如下:
android.hardware.camera
应用使用设备的后置相机。只有前置相机的设备不会列出该功能,因此如果您的应用可与任何朝向的相机通信,请改用 android.hardware.camera.any 功能。
android.hardware.camera.any
应用使用设备的其中一个相机或用户为设备连接的外置相机。 如果您的应用不要求相机必须是后置式,请使用此值来替代 android.hardware.camera。
android.hardware.camera.autofocus
应用使用设备相机支持的自动对焦功能。
应用通过使用该功能暗示其还使用 android.hardware.camera 功能,除非这个父功能在声明时使用了 android:required="false"。
android.hardware.camera.capability.manual_post_processing
应用使用设备相机支持的 MANUAL_POST_PROCESSING 功能。
您的应用可以通过该功能替换相机的自动白平衡功能。 使用 android.colorCorrection.transform、android.colorCorrection.gains 以及 TRANSFORM_MATRIX 的 android.colorCorrection.mode。
android.hardware.camera.capability.manual_sensor
应用使用设备相机支持的 MANUAL_SENSOR 功能。
该功能隐含对自动曝光锁定 (android.control.aeLock) 的支持,该支持可以让相机的曝光时间和灵敏度一直固定在特定值。
android.hardware.camera.capability.raw
应用使用设备相机支持的 RAW 功能。
该功能暗示设备可以保存 DNG(原始)文件,并且设备的相机提供您的应用直接处理这些原始图像所需的 DNG 相关元数据。
android.hardware.camera.external
应用与用户为设备连接的外置相机通信。 但该功能不能保证外置相机可供您的应用使用。
android.hardware.camera.flash
应用使用设备相机支持的闪光功能。
应用通过使用该功能暗示其还使用 android.hardware.camera 功能,除非这个父功能在声明时使用了 android:required="false"。
android.hardware.camera.front
应用使用设备的前置相机。
应用通过使用该功能暗示其还使用 android.hardware.camera 功能,除非这个父功能在声明时使用了 android:required="false"。
android.hardware.camera.level.full
应用使用设备的至少一个相机提供的 FULL 级图像捕捉支持。 提供 FULL 支持的相机可提供快速捕捉功能、逐帧控制和手动后期处理控制。
1.本文是利用textureview预览视图数据的。在xml文件中定义textureview组件
创建handler线程,创建handler;
给textureview设置监听
mPreviewView = (TextureView) findViewById(R.id.textureview);
mThreadHandler = new HandlerThread("CAMERA2");
mThreadHandler.start();
mHandler = new Handler(mThreadHandler.getLooper());
mPreviewView.setSurfaceTextureListener(surfaceTextureListener);
在textureveiw监听中可以看到以下方法;创建时,尺寸改变