在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開發者官網查詢相關資料進行開發實踐,通過以下官網鏈路進行體驗參考(指南→媒體→相機服務→開發相機應用),助力開發更高效便捷。
-
華為
+關注
關注
218文章
36002瀏覽量
262069 -
相機
+關注
關注
5文章
1577瀏覽量
55788 -
折疊屏
+關注
關注
3文章
540瀏覽量
16913 -
HarmonyOS
+關注
關注
80文章
2153瀏覽量
36037
原文標題:【HarmonyOS相機開發系列】折疊屏鏡頭切換優秀實踐
文章出處:【微信號:HarmonyOS_Dev,微信公眾號:HarmonyOS開發者】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
Pura X****闊折疊適配:解鎖超視覺與高效交互的全新體驗
鴻蒙5開發寶藏案例分享---折疊屏懸停態開發實踐
鴻蒙5開發寶藏案例分享---折疊屏開發實踐
一文帶你詳細了解HarmonyOS折疊屏設計規范!
HarmonyOS原子化服務案例分享-馬仕健專輯
不止于大,如何打造優秀的折疊屏應用體驗
HarmonyOS折疊屏設計規范的新增亮點內容
華為發布新版HarmonyOS折疊屏設計規范 持續引領折疊屏UI設計創新
華為發布新版HarmonyOS折疊屏設計規范 持續引領折疊屏UI設計創新
華為發布新版HarmonyOS折疊屏設計規范 持續引領折疊屏UI設計創新
HarmonyOS聯合綠盟發布折疊屏軟件規范,攜HUAWEI Mate X3帶來創新折疊體驗
HarmonyOS折疊屏鏡頭切換應用實踐
評論