鸿蒙next版开发:相机开发-元数据(ArkTS)

news/2024/11/14 12:28:09 标签: harmonyos, 数码相机, 华为

在HarmonyOS 5.0中,ArkTS提供了对相机元数据的访问能力,这对于开发者在相机应用中获取图像的详细信息非常有用。元数据(Metadata)是对相机返回的图像信息数据的描述和上下文,比如照片或视频中识别人像的取景框坐标等信息。本文将详细介绍如何在ArkTS中获取和使用相机元数据,并提供代码示例进行详细解读。

相机元数据开发步骤

1. 导入相关接口

首先,需要导入相机相关的接口,以便使用相机服务。

import { camera } from '@kit.CameraKit';
import { BusinessError } from '@kit.BasicServicesKit';

2. 获取元数据输出流

通过CameraOutputCapability类的supportedMetadataObjectTypes属性获取当前设备支持的元数据类型,并通过createMetadataOutput方法创建元数据输出流。

function getMetadataOutput(cameraManager: camera.CameraManager, cameraOutputCapability: camera.CameraOutputCapability): camera.MetadataOutput | undefined {
  let metadataObjectTypes: Array<camera.MetadataObjectType> = cameraOutputCapability.supportedMetadataObjectTypes;
  let metadataOutput: camera.MetadataOutput | undefined;
  try {
    metadataOutput = cameraManager.createMetadataOutput(metadataObjectTypes);
  } catch (error) {
    let err = error as BusinessError;
    console.error(`Failed to createMetadataOutput, error code: ${err.code}`); // 引用[^7^]
  }
  return metadataOutput;
}

3. 开启元数据数据输出

调用Session.start方法开启元数据数据输出,再通过监听事件metadataObjectsAvailable回调拿到数据。

async function startMetadataOutput(previewOutput: camera.PreviewOutput, metadataOutput: camera.MetadataOutput, cameraManager: camera.CameraManager): Promise<void> {
  let cameraArray: Array<camera.CameraDevice> = [];
  cameraArray = 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);
  session.addOutput(metadataOutput);
  await session.commitConfig();
  await session.start();
}

4. 监听元数据对象可用事件

在相机应用开发过程中,可以随时监听元数据对象可用事件。

function onMetadataObjectsAvailable(metadataOutput: camera.MetadataOutput): void {
  metadataOutput.on('metadataObjectsAvailable', (err: BusinessError, metadataObjectArr: Array<camera.MetadataObject>) => {
    if (err !== undefined && err.code !== 0) {
      return;
    }
    console.info('metadata output metadataObjectsAvailable');
    // 处理元数据对象...
  });
}

5. 停止输出元数据数据

调用Session.stop方法停止输出元数据数据。

function stopMetadataOutput(session: camera.Session): void {
  session.stop().then(() => {
    console.info('Callback returned with session stopped.');
  }).catch((err: BusinessError) => {
    console.error(`Failed to session stop, error code: ${err.code}`); // 引用[^7^]
  });
}

结语

通过本文的介绍,你应该对如何在HarmonyOS 5.0中使用ArkTS获取相机元数据有了基本的了解。元数据是相机开发中的一个重要方面,它提供了图像的详细信息,可以帮助开发者实现更丰富的功能。希望本文能够帮助你在开发过程中更好地利用ArkTS的相机元数据功能。


http://www.niftyadmin.cn/n/5751898.html

相关文章

目前区块链服务商备案支持的区块链技术类型

status"success"data1-name"比特币/Bitcoin/BTC"3-name"以太坊/Ethereum/ETH"875-name"超级账本/Hyperledger"5-name"柚子/EOS/EOS"6-name"恒星链/Stellar/XLM"1055-name"Quorum"7-name"莱特币/Li…

Kettle配置数据源错误“Driver class ‘org.gjt.mm.mysql.Driver‘ could not be found”解决记录

问题描述 错误提示&#xff1a;“Driver class ‘org.gjt.mm.mysql.Driver’ could not be found, make sure the ‘MySQL’ driver (jar file) is installed.” 原因分析&#xff1a; 根据错误提示是缺少了相关的数据源连接jar包。 解决方案&#xff1a; 安装对应的Mysql…

继承和多态(上)

目录 一.继承 1.何为继承 2.继承的语法 3.子类访问父类 (1)子类访问父类的成员变量 (2)子类访问的父类方法 二.super关键字 1.super用于调用父类的构造方法 2.super用于调用父类的实例方法 3.super用于访问父类的实例变量 三.子父类构造方法 和代码块的执行优先顺序…

vue3 中如何监听路由变化?

文章目录 方法一&#xff1a;使用 watch 函数监听 $route 对象方法二&#xff1a;使用 onBeforeRouteUpdate 导航守卫方法三&#xff1a;监听 router.currentRoute.value.path写在最后(总结) 在单页面应用中&#xff0c;客户端的 JavaScript 可以拦截页面的跳转请求&#xff0c…

c语言基础知识点(十五)C语言中的指针+1与指针的二进制表示+1的区别

给一个指针加上一个整数与给该指针的二进制表示加上同样的整数&#xff0c;这两者之间存在本质的区别&#xff0c;主要体现在操作对象、操作意义以及结果上。 一、操作对象不同 给一个指针加上一个整数&#xff1a; 操作对象&#xff1a;指针变量。指针是一个特殊的变量&#…

串口DMA接收不定长数据

STM32F767—&#xff1e;串口通信接收不定长数据的处理方法_stm32串口超时中断-CSDN博客 STM32-HAL库串口DMA空闲中断的正确使用方式解析SBUS信号_stm32 hal usart2 dma-CSDN博客 #define USART1_RxBuffSize 100 extern DMA_HandleTypeDef hdma_usart1_rx; //此处声明的变量在…

飞牛私有云访问外网

飞牛私有云 fnOS NAS 是一款有着卓越的性能以及强大的兼容性和智能化的管理界面&#xff0c;它之所以能在 NAS 市场中脱颖而出&#xff0c;是因为 fnOS 基于最新的 Linux 内核&#xff08;Debian发行版&#xff09;深度开发&#xff0c;不仅兼容主流 x86 硬件&#xff0c;还支持…

OpenSSH 安全漏洞——版本更新

1. 查看版本&#xff1a;ssh -V 2. 下载安装包&#xff08;同时需要更新zlib、ssl&#xff09; cd /usr/local/src wget https://www.zlib.net/zlib-1.3.1.tar.gz wget https://www.openssl.org/source/openssl-3.2.1.tar.gz wget https://cdn.openbsd.org/pub/OpenBSD/OpenS…