GHOST系统之家 - Windows系统光盘下载网站!
当前位置:GHOST系统之家>系统教程 > OpenHarmony3.2 beta4上照相机的使用之1--开启照相机预览画面

OpenHarmony3.2 beta4上照相机的使用之1--开启照相机预览画面

来源:Ghost系统之家浏览:时间:2023-10-07 09:27:11

OpenHarmony3.2 beta4上照相机的使用之1--开启照相机预览画面

作者:软通夏德旺 2022-12-15 17:35:37系统 OpenHarmony 这里为何我特意强调是OpenHarmony3.2 beta4,因为我发现即使同为3.2版本,beta4上的Camera相关的api和beta2版本差距都非常大,于是选取了当前最新的版本进行讲解。

​​想了解更多关于开源的内容,请访问:​​

​​51CTO开源基础软件社区​​

​​https://ost.51cto.com​​

随着OpenHarmony的版本更新,在3.2上已经提供了非常丰富的API来调用照相机。此处讲解的是原生的使用相机的流程,并发像Android普通应用开发一样通过一个intent直接调用系统相机应用进行拍照,根据原生的调用相机的API可以让大家自己定义功能更加丰富的相机应用。

这里为何我特意强调是OpenHarmony3.2 beta4,因为我发现即使同为3.2版本,beta4上的Camera相关的api和beta2版本差距都非常大,于是选取了当前最新的版本进行讲解。

既然使用相机,那么第一步是先想办法把相机点亮,即能通过摄像头看到预览画面,后面才是拍照、录像、分布式拍照等功能实现。

关于sdk的问题

目前在OpenHarmony3.2上调用相机,需要使用ohos-full-sdk,而非大家下载DevEco Studio所带的sdk,那个sdk被称作为public sdk。关于sdk的替换办法可以参考官方文档“​​full-SDK替换指南​​”,我这里不过多赘述。

此处核心要注意的一点是,目前我3.2 beta4上用的sdk对应的版本号为3.2.9.4

OpenHarmony3.2 beta4上照相机的使用之1--开启照相机预览画面-开源基础软件社区

而目前官方文档上写的能下载到的sdk最高版本只有3.2.5.6。

OpenHarmony3.2 beta4上照相机的使用之1--开启照相机预览画面-开源基础软件社区

因此,需要我们手动下载系统源码,自己完成sdk的编译才行,我这里是基于3.2 beta4的系统源码自行编译出来的full-sdk。

启用相机打开预览画面核心流程与代码实现

(1)动态权限申请

需要获取ohos.permission.CAMERA权限

(2)相机相关API操作流程

OpenHarmony3.2 beta4上照相机的使用之1--开启照相机预览画面-开源基础软件社区

上面是相机完整功能使用的时序图,这里我们先只按照时序图中的流程只实现预览部分。

(3)配合XComponent组件完成相机预览流的输出

XComponent组件中通过XComponentController的getXComponentSurfaceId方法可以获取到sufaceId,然后通过相机管理对象cameraManager.createPreviewOutput这个关键方法可以绑定该surface,从而实现预览画面的输出。

启用相机打开预览画面代码实现

import camera from '@ohos.multimedia.camera'const PERMISSIONS: Array = ['ohos.permission.CAMERA']let previewWidth;let previewHeight;@Entry@Componentstruct Index {private mXComponentController: XComponentController = new XComponentController()private surfaceId: string = '-1'async initCamera(surfaceId: string){//动态获取隐私权限let context = getContext(this) as anyawait context.requestPermissionsFromUser(PERMISSIONS)console.log('grantPermission,requestPermissionsFromUser');// 创建CameraManager对象let cameraManager = await camera.getCameraManager(context)if (!cameraManager) {console.error('Failed to get the CameraManager instance');}// 获取相机列表let cameraArray = await cameraManager.getSupportedCameras()if (!cameraArray) {console.error('Failed to get the cameras');}for (let index = 0; index < cameraArray.length; index++) {console.log('cameraId : ' + cameraArray[index].cameraId)// 获取相机IDconsole.log('cameraPosition : ' + cameraArray[index].cameraPosition)// 获取相机位置console.log('cameraType : ' + cameraArray[index].cameraType)// 获取相机类型console.log('connectionType : ' + cameraArray[index].connectionType)// 获取相机连接类型}// 创建相机输入流let cameraInput = await cameraManager.createCameraInput(cameraArray[0])//打开相机await cameraInput.open().then(() => {console.log('opencamera succ.');}).catch(function(err){console.log("opencamera failed with error:"+ err);});// 获取相机设备支持的输出流能力let cameraOutputCap = await cameraManager.getSupportedOutputCapability(cameraArray[0]);if (!cameraOutputCap) {console.error("outputCapability outputCapability == null || undefined")} else {console.log("outputCapability: " + JSON.stringify(cameraOutputCap));}//获取相机支持的输出能力--支持的预览配置信息let previewProfilesArray = cameraOutputCap.previewProfiles;if (!previewProfilesArray) {console.error("createOutput previewProfilesArray == null || undefined")}else{console.log("previewProfiles:"+JSON.stringify(previewProfilesArray[0]))previewWidth = previewProfilesArray[0].size.width;previewHeight = previewProfilesArray[0].size.height;}// 创建预览输出流,其中参数 surfaceId 参考下面 XComponent 组件,预览流为XComponent组件提供的surfacelet previewOutput = await cameraManager.createPreviewOutput(previewProfilesArray[0], surfaceId)if (!previewOutput) {console.error("Failed to create the PreviewOutput instance.")}else{console.log("create the PreviewOutput instance succ.")}//创建会话let captureSession = await cameraManager.createCaptureSession()if (!captureSession) {console.error('Failed to create the CaptureSession instance.');return;}console.log('Callback returned with the CaptureSession instance.' + captureSession);// 开始配置会话await captureSession.beginConfig().then(()=>{console.log('captureSession beginConfig succ');}).catch(function(err){console.log("captureSession beginConfig failed with error:"+ err);}); // 向会话中添加相机输入流await captureSession.addInput(cameraInput).then(() => {console.log('captureSession addInput instance is added.');}).catch(function(err){console.log("captureSession addInput failed with error:"+ err);});// 向会话中添加预览输入流await captureSession.addOutput(previewOutput).then(() => {console.log('captureSession addOutput previewOutput instance is added.');}).catch(function(err){console.log("captureSession addOutput previewOutput failed with error:"+ err);});// 提交会话配置await captureSession.commitConfig().then(() => {console.log('captureSession commitConfig success.');}).catch(function(err){console.log("captureSession commitConfig failed with error:"+ err);});// 启动会话await captureSession.start().then(() => {console.log('captureSession start success.');}).catch(function(err){console.log("captureSession start failed with error:"+ err);});}build() {Flex() {XComponent({ // 创建XComponentid: '',type: 'surface',libraryname: '',controller: this.mXComponentController}).onLoad(() => {// 设置onload回调// 设置Surface宽高(1920*1080),预览尺寸设置参考前面 previewProfilesArray 获取的当前设备所支持的预览分辨率大小去设置this.mXComponentController.setXComponentSurfaceSize({surfaceWidth:previewWidth,surfaceHeight:previewHeight})// 获取Surface IDthis.surfaceId = this.mXComponentController.getXComponentSurfaceId()this.initCamera(this.surfaceId)}).width('100%') // 设置XComponent宽度.height('100%')// 设置XComponent高度}}}

​​想了解更多关于开源的内容,请访问:​​

​​51CTO开源基础软件社区​​

​​https://ost.51cto.com​​

责任编辑:jianghua 来源:51CTO 开源基础软件社区 API鸿蒙

推荐系统

  • 电脑公司Ghost Win8.1 x32 精选纯净版2022年7月(免激活) ISO镜像高速下载

    电脑公司Ghost Win8.1 x32 精选纯净版2022年7月(免激活) ISO镜像高速下载

    语言:中文版系统大小:2.98GB系统类型:Win8

    电脑公司Ghost Win8.1x32位纯净版V2022年7月版本集成了自2022流行的各种硬件驱动,首次进入系统即全部硬件已安装完毕。电脑公司Ghost Win8.1x32位纯净版具有更安全、更稳定、更人性化等特点。集成最常用的装机软件,精心挑选的系统维护工具,加上绿茶独有

  • 微软Win11原版22H2下载_Win11GHOST 免 激活密钥 22H2正式版64位免费下载

    微软Win11原版22H2下载_Win11GHOST 免 激活密钥 22H2正式版64位免费下载

    语言:中文版系统大小:5.13GB系统类型:Win11

    微软Win11原版22H2下载_Win11GHOST 免 激活密钥 22H2正式版64位免费下载系统在家用办公上跑分表现都是非常优秀,完美的兼容各种硬件和软件,运行环境安全可靠稳定。Win11 64位 Office办公版(免费)优化  1、保留 Edge浏览器。  2、隐藏“操作中心”托盘图标。  3、保留常用组件(微软商店,计算器,图片查看器等)。  5、关闭天气资讯。 

  • Win11 21H2 官方正式版下载_Win11 21H2最新系统免激活下载

    Win11 21H2 官方正式版下载_Win11 21H2最新系统免激活下载

    语言:中文版系统大小:4.75GB系统类型:Win11

    Ghost Win11 21H2是微软在系统方面技术积累雄厚深耕多年,Ghost Win11 21H2系统在家用办公上跑分表现都是非常优秀,完美的兼容各种硬件和软件,运行环境安全可靠稳定。Ghost Win11 21H2是微软最新发布的KB5019961补丁升级而来的最新版的21H2系统,以Windows 11 21H2 22000 1219 专业版为基础进行优化,保持原汁原味,系统流畅稳定,保留常用组件

  • windows11中文版镜像 微软win11正式版简体中文GHOST ISO镜像64位系统下载

    windows11中文版镜像 微软win11正式版简体中文GHOST ISO镜像64位系统下载

    语言:中文版系统大小:5.31GB系统类型:Win11

    windows11中文版镜像 微软win11正式版简体中文GHOST ISO镜像64位系统下载,微软win11发布快大半年了,其中做了很多次补丁和修复一些BUG,比之前的版本有一些功能上的调整,目前已经升级到最新版本的镜像系统,并且优化了自动激活,永久使用。windows11中文版镜像国内镜像下载地址微软windows11正式版镜像 介绍:1、对函数算法进行了一定程度的简化和优化

  • 微软windows11正式版GHOST ISO镜像 win11下载 国内最新版渠道下载

    微软windows11正式版GHOST ISO镜像 win11下载 国内最新版渠道下载

    语言:中文版系统大小:5.31GB系统类型:Win11

    微软windows11正式版GHOST ISO镜像 win11下载 国内最新版渠道下载,微软2022年正式推出了win11系统,很多人迫不及待的要体验,本站提供了最新版的微软Windows11正式版系统下载,微软windows11正式版镜像 是一款功能超级强大的装机系统,是微软方面全新推出的装机系统,这款系统可以通过pe直接的完成安装,对此系统感兴趣,想要使用的用户们就快来下载

  • 微软windows11系统下载 微软原版 Ghost win11 X64 正式版ISO镜像文件

    微软windows11系统下载 微软原版 Ghost win11 X64 正式版ISO镜像文件

    语言:中文版系统大小:0MB系统类型:Win11

    微软Ghost win11 正式版镜像文件是一款由微软方面推出的优秀全新装机系统,这款系统的新功能非常多,用户们能够在这里体验到最富有人性化的设计等,且全新的柔软界面,看起来非常的舒服~微软Ghost win11 正式版镜像文件介绍:1、与各种硬件设备兼容。 更好地完成用户安装并有效地使用。2、稳定使用蓝屏,系统不再兼容,更能享受无缝的系统服务。3、为

  • 雨林木风Windows11专业版 Ghost Win11官方正式版 (22H2) 系统下载

    雨林木风Windows11专业版 Ghost Win11官方正式版 (22H2) 系统下载

    语言:中文版系统大小:4.75GB系统类型:

    雨林木风Windows11专业版 Ghost Win11官方正式版 (22H2) 系统下载在系统方面技术积累雄厚深耕多年,打造了国内重装系统行业的雨林木风品牌,其系统口碑得到许多人认可,积累了广大的用户群体,雨林木风是一款稳定流畅的系统,一直以来都以用户为中心,是由雨林木风团队推出的Windows11国内镜像版,基于国内用户的习惯,做了系统性能的优化,采用了新的系统

  • 雨林木风win7旗舰版系统下载 win7 32位旗舰版 GHOST 免激活镜像ISO

    雨林木风win7旗舰版系统下载 win7 32位旗舰版 GHOST 免激活镜像ISO

    语言:中文版系统大小:5.91GB系统类型:Win7

    雨林木风win7旗舰版系统下载 win7 32位旗舰版 GHOST 免激活镜像ISO在系统方面技术积累雄厚深耕多年,加固了系统安全策略,雨林木风win7旗舰版系统在家用办公上跑分表现都是非常优秀,完美的兼容各种硬件和软件,运行环境安全可靠稳定。win7 32位旗舰装机版 v2019 05能够帮助用户们进行系统的一键安装、快速装机等,系统中的内容全面,能够为广大用户