鸿蒙next版开发:相机开发-预览(ArkTS)

news/2024/11/19 23:19:41/

在HarmonyOS 5.0中,使用ArkTS进行相机开发时,预览是一个核心功能。本文将详细介绍如何使用ArkTS进行相机预览,并提供代码示例进行详细解读。

相机预览基础

相机预览功能允许应用实时显示相机捕获的画面。在ArkTS中,这通常涉及到以下几个步骤:

  1. 导入相机接口:首先,需要导入camera模块,它提供了相机相关的属性和方法。

    import { camera } from '@kit.CameraKit';
    import { BusinessError } from '@kit.BasicServicesKit';
  2. 创建Surface:创建一个XComponent组件,它为预览流提供的Surface(获取surfaceId请参考getXcomponentSurfaceId方法)。

  3. 获取相机输出能力:通过CameraOutputCapability类获取当前设备支持的预览能力,并创建预览输出流。

    function getPreviewOutput(cameraManager: camera.CameraManager, cameraOutputCapability: camera.CameraOutputCapability, surfaceId: string): camera.PreviewOutput | undefined {let previewProfilesArray: Array<camera.Profile> = cameraOutputCapability.previewProfiles;let previewOutput: camera.PreviewOutput | undefined = undefined;try {previewOutput = cameraManager.createPreviewOutput(previewProfilesArray[0], surfaceId);} catch (error) {let err = error as BusinessError;console.error("Failed to create the PreviewOutput instance. error code: " + err.code);}return previewOutput;
    }
  4. 创建会话并开始预览:创建相机输入流和会话,并将预览输出流添加到会话中,然后开始预览。

    async function startPreviewOutput(cameraManager: camera.CameraManager, previewOutput: camera.PreviewOutput): Promise<void> {let cameraArray: Array<camera.CameraDevice> = cameraManager.getSupportedCameras();if (cameraArray.length == 0) {console.error('no camera.');return;}// 获取支持的模式类型let sceneModes: Array<camera.SceneMode> = cameraManager.getSupportedSceneModes(cameraArray[0]);let isSupportPhotoMode: boolean = sceneModes.indexOf(camera.SceneMode.NORMAL_PHOTO) >= 0;if (!isSupportPhotoMode) {console.error('photo mode not support');return;}let cameraInput: camera.CameraInput | undefined = undefined;cameraInput = cameraManager.createCameraInput(cameraArray[0]);if (cameraInput === undefined) {console.error('cameraInput is undefined');return;}// 打开相机await cameraInput.open();let session: camera.PhotoSession = cameraManager.createSession(camera.SceneMode.NORMAL_PHOTO) as camera.PhotoSession;session.beginConfig();session.addInput(cameraInput);session.addOutput(previewOutput);await session.commitConfig();await session.start();
    }
  5. 监听预览输出状态:监听预览输出流的状态,包括启动、结束和错误。

    function onPreviewOutputFrameStart(previewOutput: camera.PreviewOutput): void {previewOutput.on('frameStart', (err: BusinessError) => {if (err !== undefined && err.code !== 0) {return;}console.info('Preview frame started');});
    }function onPreviewOutputFrameEnd(previewOutput: camera.PreviewOutput): void {previewOutput.on('frameEnd', (err: BusinessError) => {if (err !== undefined && err.code !== 0) {return;}console.info('Preview frame ended');});
    }

结语

通过本文的介绍,你应该对如何在HarmonyOS 5.0中使用ArkTS进行相机预览有了基本的了解。相机预览功能是相机应用的基础,合理利用这些API可以使你的应用更加专业和高效。希望本文能够帮助你在开发过程中更好地利用ArkTS的相机预览功能。


http://www.ppmy.cn/news/1548350.html

相关文章

专题二十一_动态规划_子数组系列_算法专题详细总结

目录 子数组系列问题&#xff1a; 1. 最⼤⼦数组和&#xff08;medium&#xff09; 解析&#xff1a; 1.状态表达式&#xff1a; 2.状态转移方程&#xff1a; 3.初始化&#xff1a; 4.填表顺序&#xff1a; 5.返回值&#xff1a; 总结&#xff1a; 2. 环形⼦数组的最⼤和&…

Comfy UI Manager 自定义节点管理

在 Stable Diffusion Web UI 中&#xff0c;可以通过插件的方式&#xff0c;扩展更多的功能&#xff0c;如&#xff1a;tagger提示词反推、ControlNet 等。 同样的在 Comfy UI 中有类似的功能实现&#xff0c;不过在 Comfy UI 中叫做自定义节点。 通过安装自定义节点的方式&a…

Golang | Leetcode Golang题解之第564题寻找最近的回文数

题目&#xff1a; 题解&#xff1a; func nearestPalindromic(n string) string {m : len(n)candidates : []int{int(math.Pow10(m-1)) - 1, int(math.Pow10(m)) 1}selfPrefix, _ : strconv.Atoi(n[:(m1)/2])for _, x : range []int{selfPrefix - 1, selfPrefix, selfPrefix …

Spring Security 认证

Spring Security 是一个功能强大的安全框架&#xff0c;广泛用于保护 Java 应用程序。它提供了多种认证和授权机制&#xff0c;以确保应用程序的安全性。以下是认证过程的详细概述以及几种常见的认证方式。 认证过程概述 用户凭证提交&#xff1a; 用户通过登录表单提交用户名…

外包干了2个月,技术明显退步

回望过去&#xff0c;我是一名普通的本科生&#xff0c;于2019年通过校招有幸加入了南京某知名软件公司。那时的我&#xff0c;满怀着对未来的憧憬和热情&#xff0c;投入到了功能测试的岗位中。日复一日&#xff0c;年复一年&#xff0c;转眼间&#xff0c;我已经在这个岗位上…

SpringBoot(二十三)SpringBoot集成JWT

最近整理完docker之后&#xff0c;突然想到&#xff0c;我是不是可以使用docker部署多个blog实例&#xff0c;来实现一下负载均衡呢&#xff1f; 现阶段&#xff0c;blog项目使用的是SESSION来做用户登录信息存储&#xff0c;如果配置负载均衡的话&#xff0c;那session其实就不…

Javaweb-day13事务管理AOP

spring的事务管理&spring框架的第二大核心AOP面向切面编程 spring框架的第一大核心是前面讲的IOC控制反转 事务管理 事务回顾 概念&#xff1a;事务是一组操作的集合&#xff0c;它是一个不可分割的工作单位&#xff0c;这些操作要么同时成功&#xff0c;要么同时失败。…

动手学深度学习69 BERT预训练

1. BERT 3亿参数 30亿个词 在输入和loss上有创新 两个句子拼起来放到encoder–句子对 cls-class分类 sep-seperate 分隔符 分开每个句子 告诉是哪个句子 两个句子给不同的向量 位置编码不用sin cos&#xff0c; 让网络自己学习 bert–通用任务 encoder 是双向的&#xff0c;…