设备输入
说明:
当前为Beta阶段。
在开发相机应用时,需要先参考开发准备申请相关权限。
相机应用可通过调用和控制相机设备,完成预览、拍照和录像等基础操作。
开发步骤
详细的API说明请参见Camera API参考。
-
导入camera接口,接口中提供了相机相关的属性和方法,导入方法如下。
import kit.CameraKit.* import ohos.business_exception.BusinessException import kit.PerformanceAnalysisKit.Hilog import ohos.callback_invoke.Callback0Argument说明:
在相机设备输入之前需要先完成相机管理,详细开发步骤请参见相机管理。
-
通过CameraManager类中的createCameraInput方法创建相机输入流。
class ErrorCallBack <: Callback0Argument { public open func invoke(error:?BusinessException): Unit { if (let Some(e) <- error) { Hilog.error(0,"","Camera input error code: ${e.code}","") } } } func createInput(cameraDevice: CameraDevice, cameraManager: CameraManager): CameraInput { // 创建相机输入流。 let cameraInput: CameraInput = cameraManager.createCameraInput(cameraDevice) // 监听cameraInput错误信息。 cameraInput.on(CameraEvents.CameraError, cameraDevice, ErrorCallBack()) // 打开相机。 cameraInput.open() return cameraInput } -
通过getSupportedSceneModes方法,获取当前相机设备支持的模式列表,列表中存储了相机设备支持的所有模式SceneMode。
func getSupportedSceneMode(cameraDevice: CameraDevice, cameraManager: CameraManager): Array<SceneMode> { // 获取相机设备支持的模式列表。 let sceneModeArray: Array<SceneMode> = cameraManager.getSupportedSceneModes(cameraDevice) if (sceneModeArray.size > 0) { for (index in 0..sceneModeArray.size) { Hilog.info(0,"","Camera SceneMode : ${sceneModeArray[index]}") } return sceneModeArray } else { Hilog.error(0,"","cameraManager.getSupportedSceneModes error") return [] } } -
通过getSupportedOutputCapability方法,获取当前相机设备支持的所有输出流,如预览流、拍照流、录像流等。输出流在CameraOutputCapability中的各个profile字段中,根据相机设备指定模式SceneMode的不同,需要添加不同类型的输出流。
func getSupportedOutputCapability(cameraDevice: CameraDevice, cameraManager: CameraManager, sceneMode: SceneMode): CameraOutputCapability { // 获取相机设备支持的输出流能力。 let cameraOutputCapability: CameraOutputCapability = cameraManager.getSupportedOutputCapability(cameraDevice, sceneMode) // 以NormalPhoto模式为例,需要添加预览流、拍照流。 // previewProfiles属性为获取当前设备支持的预览输出流。 let previewProfilesArray: Array<Profile> = cameraOutputCapability.previewProfiles if (!previewProfilesArray.size == 0) { Hilog.error(0,"","createOutput previewProfilesArray is empty") } //photoProfiles属性为获取当前设备支持的拍照输出流。 let photoProfilesArray: Array<Profile> = cameraOutputCapability.photoProfiles if (photoProfilesArray.size == 0) { Hilog.error(0,"","createOutput photoProfilesArray is empty") } return cameraOutputCapability }