在2025華為開發(fā)者大會的圖片和相機分論壇上,美顏相機分享了如何通過折疊屏鏡頭適配,打造多端一致的拍攝體驗。隨著華為折疊屏產品的不斷豐富,相機開發(fā)在折疊屏上也面臨獨特技術難題,鏡頭選錯導致黑屏、角度設置錯誤導致拉伸或者畫面旋轉的問題日益凸顯。本文通過鏡頭選取、鏡頭接續(xù)、角度設置三個維度來探討在HarmonyOS折疊屏設備上更多創(chuàng)新的使用方式和更豐富的布局樣式。
統(tǒng)一、簡易的鏡頭選取
HarmonyOS基于折疊狀態(tài)和鏡頭位置,精準描述每一顆鏡頭,并僅上報當前折疊狀態(tài)下的前后置鏡頭集合。這種機制確保了應用能夠按照直板機鏡頭的使用習慣,直接通過位置信息打開鏡頭,而HarmonyOS會自動映射為當前折疊狀態(tài)下的鏡頭。這種設計保障了直板機和折疊機在鏡頭使用上的統(tǒng)一性和兼容性,極大簡化了開發(fā)者的適配工作。

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?[];
? }
}
快捷的鏡頭切換方式
折疊設備形態(tài)各異,在相機應用的開發(fā)過程中需要統(tǒng)一的攝像頭切換方案,以確保用戶在拍照、錄像過程中獲得更好的體驗。為了應對折疊屏設備的動態(tài)變化,HarmonyOS提供了兩種鏡頭切換方式,以滿足不同場景的需求:
方式1:應用自主切換鏡頭
適用場景:適用于需要精致拍照體驗的場景,如美顏相機。
實現(xiàn)方式:應用需監(jiān)聽折疊狀態(tài)的變化,自主完成鏡頭的啟停、切換,重新配置會話(涉及修改分辨率),重新查詢鏡頭能力范圍,并調整UX布局。
優(yōu)勢:提供高度定制化的拍攝體驗,滿足復雜場景的需求。
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++) {
? ? ??// 選取當前折疊狀態(tà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:系統(tǒng)自動切換鏡頭
適用場景:適用于簡單場景,如人臉識別。
實現(xiàn)方式:HarmonyOS自動完成鏡頭切換、會話配置,應用使能自動切換鏡頭的能力時,在有多個前置鏡頭的折疊設備上,不同的折疊狀態(tài)下可自動切換到當前可使用的前置鏡頭,避免前置鏡頭被折入內部導致黑屏。
優(yōu)勢:簡化開發(fā)流程,提升用戶體驗的一致性和便捷性。
import{ camera }from'@kit.CameraKit';
functionenableAutoDeviceSwitchFn(session: camera.PhotoSession) {
if(session.isAutoDeviceSwitchSupported()) {
session.enableAutoDeviceSwitch(true);
}
}
簡單易用的角度查詢設置能力
為了確保在不同折疊狀態(tài)下拍攝的照片和視頻保持正確的方向和角度,HarmonyOS相機采用了以下角度計算公式:
預覽:屏幕跟隨鏡頭一起旋轉,因此預覽角度需考慮屏幕旋轉角度。
公式:旋轉角度 = 鏡頭安裝角度 + 屏幕旋轉角度
拍照/錄像:要保證照片/視頻正向存儲,因此與設備旋轉角度相關。
公式:旋轉角度 = 前置:鏡頭安裝角度 – 設備旋轉角度
后置:鏡頭安裝角度 + 設備旋轉角度
通過這些角度計算,美顏相機確保了在不同折疊狀態(tài)下,用戶能夠獲得一致且高質量的拍攝體驗。
import{ camera }from'@kit.CameraKit';
import{BusinessError}from'@kit.BasicServicesKit';
import{ display }from'@kit.ArkUI';
// 以預覽舉例,previewOutput是創(chuàng)建的預覽輸出
letinitDisplayRotation = display.getDefaultDisplaySync().rotation;
letinitPreviewRotation = previewOutput.getPreviewRotation(initDisplayRotation * camera.ImageRotation.ROTATION_90);
previewOutput.setPreviewRotation(initPreviewRotation,false);
display.off('change');
display.on('change',() =>{
// 在折疊狀態(tài)變化時,重新查詢旋轉角度并下發(fā)
initDisplayRotation = display.getDefaultDisplaySync().rotation;
letimageRotation = initDisplayRotation * camera.ImageRotation.ROTATION_90;
letpreviewRotation = previewOutput.getPreviewRotation(imageRotation);
previewOutput.setPreviewRotation(previewRotation,false);
});
開發(fā)者可通過HarmonyOS開發(fā)者官網(wǎng)查詢相關資料進行開發(fā)實踐,通過以下官網(wǎng)鏈路進行體驗參考(指南→媒體→相機服務→開發(fā)相機應用),助力開發(fā)更高效便捷。
-
華為
+關注
關注
217文章
35618瀏覽量
259787 -
相機
+關注
關注
5文章
1519瀏覽量
55275 -
折疊屏
+關注
關注
3文章
539瀏覽量
16674 -
HarmonyOS
+關注
關注
80文章
2144瀏覽量
35225
原文標題:【HarmonyOS相機開發(fā)系列】折疊屏鏡頭切換優(yōu)秀實踐
文章出處:【微信號:HarmonyOS_Dev,微信公眾號:HarmonyOS開發(fā)者】歡迎添加關注!文章轉載請注明出處。
發(fā)布評論請先 登錄
Pura X****闊折疊適配:解鎖超視覺與高效交互的全新體驗
鴻蒙5開發(fā)寶藏案例分享---折疊屏懸停態(tài)開發(fā)實踐
鴻蒙5開發(fā)寶藏案例分享---折疊屏開發(fā)實踐
外屏和寬屏浪費了?HarmonyOS折疊屏設計規(guī)范教你用起來
一文帶你詳細了解HarmonyOS折疊屏設計規(guī)范!
harmonyos程序開發(fā)如何暫時屏蔽折疊屏?
HarmonyOS原子化服務案例分享-馬仕健專輯
不止于大,如何打造優(yōu)秀的折疊屏應用體驗
折疊屏原理
HarmonyOS折疊屏設計規(guī)范的新增亮點內容
華為發(fā)布新版HarmonyOS折疊屏設計規(guī)范 持續(xù)引領折疊屏UI設計創(chuàng)新
華為發(fā)布新版HarmonyOS折疊屏設計規(guī)范 持續(xù)引領折疊屏UI設計創(chuàng)新
華為發(fā)布新版HarmonyOS折疊屏設計規(guī)范 持續(xù)引領折疊屏UI設計創(chuàng)新
HarmonyOS聯(lián)合綠盟發(fā)布折疊屏軟件規(guī)范,攜HUAWEI Mate X3帶來創(chuàng)新折疊體驗

HarmonyOS折疊屏鏡頭切換應用實踐
評論