在2025华为开发者大会的图片和相机分论坛上,美颜相机分享了如何通过折叠屏镜头适配,打造多端一致的拍摄体验。随着华为折叠屏产品的不断丰富,相机开发在折叠屏上也面临独特技术难题,镜头选错导致黑屏、角度设置错误导致拉伸或者画面旋转的问题日益凸显。本文通过镜头选取、镜头接续、角度设置三个维度来探讨在HarmonyOS折叠屏设备上更多创新的使用方式和更丰富的布局样式。
统一、简易的镜头选取
HarmonyOS基于折叠状态和镜头位置,精准描述每一颗镜头,并仅上报当前折叠状态下的前后置镜头集合。这种机制确保了应用能够按照直板机镜头的使用习惯,直接通过位置信息打开镜头,而HarmonyOS会自动映射为当前折叠状态下的镜头。这种设计保障了直板机和折叠机在镜头使用上的统一性和兼容性,极大简化了开发者的适配工作。

import{ camera }from'@kit.CameraKit';
import{BusinessError}from'@kit.BasicServicesKit';
import{ common }from'@kit.AbilityKit';
functiongetCameraManager(context: common.BaseContext): camera.CameraManager{
letcameraManager: camera.CameraManager= camera.getCameraManager(context);
returncameraManager;
}
functiongetCameraDevices(cameraManager: camera.CameraManager):Array {
letcameraArray:Array = cameraManager.getSupportedCameras();
if(cameraArray !=undefined&& cameraArray.length>0) {
for(letindex =0; index < cameraArray.length; index++) {
console.info('cameraId : ' + cameraArray[index].cameraId); // 相机ID
console.info('cameraPosition : ' + cameraArray[index].cameraPosition); // 相机位置
console.info('cameraType : ' + cameraArray[index].cameraType); // 相机类型
console.info('connectionType : ' + cameraArray[index].connectionType); // 相机连接类型
}
return cameraArray;
} else {
console.error("cameraManager.getSupportedCameras error");
return [];
}
}
快捷的镜头切换方式
折叠设备形态各异,在相机应用的开发过程中需要统一的摄像头切换方案,以确保用户在拍照、录像过程中获得更好的体验。为了应对折叠屏设备的动态变化,HarmonyOS提供了两种镜头切换方式,以满足不同场景的需求:
方式1:应用自主切换镜头
适用场景:适用于需要精致拍照体验的场景,如美颜相机。
实现方式:应用需监听折叠状态的变化,自主完成镜头的启停、切换,重新配置会话(涉及修改分辨率),重新查询镜头能力范围,并调整UX布局。
优势:提供高度定制化的拍摄体验,满足复杂场景的需求。
import{ camera }from'@kit.CameraKit';
import{BusinessError}from'@kit.BasicServicesKit';
functionregisterFoldStatusChanged(err: BusinessError, foldStatusInfo: camera.FoldStatusInfo) {
console.info('foldStatusChanged foldStatus: '+ foldStatusInfo.foldStatus);
for(leti =0; i < foldStatusInfo.supportedCameras.length; i++) {
// 选取当前折叠状态的前置镜头,进行重新配流和UX布局调整
console.info(`foldStatusChanged camera[${i}]: ${foldStatusInfo.supportedCameras[i].cameraId}`);
}
}
function onFoldStatusChange(cameraManager: camera.CameraManager) {
cameraManager.on('foldStatusChange', registerFoldStatusChanged);
}
function offFoldStatusChange(cameraManager: camera.CameraManager) {
cameraManager.off('foldStatusChange', registerFoldStatusChanged);
}
方式2:系统自动切换镜头
适用场景:适用于简单场景,如人脸识别。
实现方式:HarmonyOS自动完成镜头切换、会话配置,应用使能自动切换镜头的能力时,在有多个前置镜头的折叠设备上,不同的折叠状态下可自动切换到当前可使用的前置镜头,避免前置镜头被折入内部导致黑屏。
优势:简化开发流程,提升用户体验的一致性和便捷性。
import{ camera }from'@kit.CameraKit';
functionenableAutoDeviceSwitchFn(session: camera.PhotoSession) {
if(session.isAutoDeviceSwitchSupported()) {
session.enableAutoDeviceSwitch(true);
}
}
简单易用的角度查询设置能力
为了确保在不同折叠状态下拍摄的照片和视频保持正确的方向和角度,HarmonyOS相机采用了以下角度计算公式:
预览:屏幕跟随镜头一起旋转,因此预览角度需考虑屏幕旋转角度。
公式:旋转角度 = 镜头安装角度 + 屏幕旋转角度
拍照/录像:要保证照片/视频正向存储,因此与设备旋转角度相关。
公式:旋转角度 = 前置:镜头安装角度 – 设备旋转角度
后置:镜头安装角度 + 设备旋转角度
通过这些角度计算,美颜相机确保了在不同折叠状态下,用户能够获得一致且高质量的拍摄体验。
import{ camera }from'@kit.CameraKit';
import{BusinessError}from'@kit.BasicServicesKit';
import{ display }from'@kit.ArkUI';
// 以预览举例,previewOutput是创建的预览输出
letinitDisplayRotation = display.getDefaultDisplaySync().rotation;
letinitPreviewRotation = previewOutput.getPreviewRotation(initDisplayRotation * camera.ImageRotation.ROTATION_90);
previewOutput.setPreviewRotation(initPreviewRotation,false);
display.off('change');
display.on('change',() =>{
// 在折叠状态变化时,重新查询旋转角度并下发
initDisplayRotation = display.getDefaultDisplaySync().rotation;
letimageRotation = initDisplayRotation * camera.ImageRotation.ROTATION_90;
letpreviewRotation = previewOutput.getPreviewRotation(imageRotation);
previewOutput.setPreviewRotation(previewRotation,false);
});
开发者可通过HarmonyOS开发者官网查询相关资料进行开发实践,通过以下官网链路进行体验参考(指南→媒体→相机服务→开发相机应用),助力开发更高效便捷。
-
华为
+关注
关注
217文章
35782浏览量
260659 -
相机
+关注
关注
5文章
1535浏览量
55404 -
折叠屏
+关注
关注
3文章
540浏览量
16763 -
HarmonyOS
+关注
关注
80文章
2146浏览量
35537
原文标题:【HarmonyOS相机开发系列】折叠屏镜头切换优秀实践
文章出处:【微信号:HarmonyOS_Dev,微信公众号:HarmonyOS开发者】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
Pura X****阔折叠适配:解锁超视觉与高效交互的全新体验
鸿蒙5开发宝藏案例分享---折叠屏悬停态开发实践
鸿蒙5开发宝藏案例分享---折叠屏开发实践
一文带你详细了解HarmonyOS折叠屏设计规范!
HarmonyOS原子化服务案例分享-马仕健专辑
不止于大,如何打造优秀的折叠屏应用体验
HarmonyOS折叠屏设计规范的新增亮点内容
华为发布新版HarmonyOS折叠屏设计规范 持续引领折叠屏UI设计创新
华为发布新版HarmonyOS折叠屏设计规范 持续引领折叠屏UI设计创新
华为发布新版HarmonyOS折叠屏设计规范 持续引领折叠屏UI设计创新
HarmonyOS联合绿盟发布折叠屏软件规范,携HUAWEI Mate X3带来创新折叠体验

HarmonyOS折叠屏镜头切换应用实践
评论