第15章_HarmonyOs開(kāi)發(fā)圖解之 相機(jī)
第15章 HarmonyOs開(kāi)發(fā)圖解之 相機(jī)HarmonyOS 學(xué)習(xí)系統(tǒng) | 階段三高級(jí)深耕期學(xué)習(xí)目標(biāo)序號(hào)能力1掌握 HarmonyOS 相機(jī)開(kāi)發(fā)的核心流程獲取設(shè)備 - 配置 - 預(yù)覽 - 拍照2理解 CameraKit、Camera、FrameConfig 三層架構(gòu)3能夠?qū)崿F(xiàn)預(yù)覽、拍照、連拍和錄像功能核心圖解內(nèi)容講解15.1 相機(jī)開(kāi)發(fā)概述HarmonyOS 的相機(jī)開(kāi)發(fā)基于三層架構(gòu)CameraKit選角導(dǎo)演選擇攝像頭 -Camera攝影機(jī)實(shí)際拍攝設(shè)備 -FrameConfig拍攝腳本定義預(yù)覽/拍照/連拍。Surface 則是監(jiān)視器屏幕決定了畫(huà)面顯示在哪里。生活化類比相機(jī)開(kāi)發(fā)就像指揮一場(chǎng)拍攝CameraKit是選角導(dǎo)演選擇哪個(gè)攝像頭——前置/后置Camera是攝影機(jī)實(shí)際的拍攝設(shè)備FrameConfig是拍攝腳本定義拍什么類型——預(yù)覽/拍照/連拍Surface是監(jiān)視器屏幕畫(huà)面顯示在哪里。流程是先選角獲取相機(jī) ID再架設(shè)攝影機(jī)createCamera然后排練configure 配置 Surface最后開(kāi)拍triggerLoopingCapture 預(yù)覽 / triggerSingleCapture 拍照。15.2 相機(jī)開(kāi)發(fā)核心流程// 1. 獲取相機(jī)設(shè)備列表CameraKitcameraKitCameraKit.getInstance(context);String[]cameraIdscameraKit.getCameraIds();// 2. 創(chuàng)建相機(jī)實(shí)例cameraKit.createCamera(cameraIds[0],cameraStateCallback,eventHandler);// 3. 相機(jī)創(chuàng)建成功回調(diào)中配置 SurfaceOverridepublicvoidonCreated(Cameracamera){CameraConfig.BuilderbuildernewCameraConfig.Builder();builder.addSurface(previewSurface);// 預(yù)覽 Surfacebuilder.addSurface(pictureSurface);// 拍照 Surfacebuilder.setFrameStateCallback(frameStateCallback,eventHandler);camera.configure(builder.build());}// 4. 配置完成回調(diào)中開(kāi)始預(yù)覽OverridepublicvoidonConfigured(Cameracamera){FrameConfigpreviewConfigcamera.getFrameConfigBuilder(FrameConfig.FRAME_CONFIG_PREVIEW).build();camera.triggerLoopingCapture(previewConfig);// 開(kāi)始預(yù)覽}// 5. 拍照FrameConfigpictureConfigcamera.getFrameConfigBuilder(FrameConfig.FRAME_CONFIG_PICTURE).build();camera.triggerSingleCapture(pictureConfig);15.3 相機(jī)能力查詢不同設(shè)備的相機(jī)能力差異極大開(kāi)發(fā)前務(wù)必查詢// 查詢相機(jī)支持的分辨率和幀率CameraAbilityabilitycameraKit.getCameraAbility(cameraIds[0]);Size[]sizesability.getSupportedSizes(FrameConfig.FRAME_CONFIG_PREVIEW);for(Sizesize:sizes){HiLog.info(TAG,支持預(yù)覽分辨率: size.widthxsize.height);}15.4 相機(jī)權(quán)限清單權(quán)限用途必要性ohos.permission.CAMERA使用相機(jī)硬件必選ohos.permission.MICROPHONE錄像時(shí)錄音可選ohos.permission.WRITE_MEDIA保存照片/視頻到外部存儲(chǔ)可選ohos.permission.MEDIA_LOCATION保存位置信息到照片可選代碼速查卡API功能示例CameraKit.getInstance(ctx)獲取 CameraKit 實(shí)例CameraKit.getInstance(context)getCameraIds()獲取相機(jī) ID 列表cameraKit.getCameraIds()createCamera(id, cb, handler)創(chuàng)建相機(jī)實(shí)例cameraKit.createCamera(ids[0], cb, handler)configure(config)配置相機(jī) Surfacecamera.configure(config)triggerLoopingCapture(fc)開(kāi)始預(yù)覽循環(huán)捕獲camera.triggerLoopingCapture(previewConfig)triggerSingleCapture(fc)拍照單次捕獲camera.triggerSingleCapture(pictureConfig)getCameraAbility(id)查詢相機(jī)能力cameraKit.getCameraAbility(cameraId)release()釋放相機(jī)資源camera.release()與 Android/iOS 對(duì)比特性HarmonyOSAndroidiOS相機(jī) APICameraKit CameraCamera2 API / CameraXAVFoundation (AVCaptureSession)預(yù)覽方式SurfaceProvider SurfaceSurfaceView / PreviewViewAVCaptureVideoPreviewLayer拍照方式triggerSingleCaptureImageReader CaptureRequestAVCapturePhotoOutput相機(jī)選擇cameraIds[0]/[1]CameraCharacteristics.LENS_FACINGAVCaptureDevice.default()能力查詢getCameraAbility()CameraCharacteristicsAVCaptureDevice.DeviceType?? 踩坑回憶錄為什么相機(jī)一直打開(kāi)失敗我寫(xiě)了一個(gè)帶相機(jī)的 App啟動(dòng)時(shí)直接調(diào)用CameraKit.getInstance()結(jié)果總是返回 null。排查后發(fā)現(xiàn)——另一個(gè)相機(jī) App 還在后臺(tái)運(yùn)行HarmonyOS 規(guī)定同一時(shí)刻只有一個(gè)相機(jī)應(yīng)用能運(yùn)行因?yàn)閿z像頭是獨(dú)占硬件資源。正確做法是先檢查相機(jī)是否可用提示用戶關(guān)閉其他相機(jī) App或者使用try-catch捕獲異常并給出友好提示。另外不同設(shè)備的相機(jī)能力差異極大。我曾在 A 設(shè)備上完美運(yùn)行的 4K 預(yù)覽在 B 設(shè)備上直接黑屏——因?yàn)?B 設(shè)備最高只支持 1080P 預(yù)覽。開(kāi)發(fā)前務(wù)必用CameraKit.getCameraAbility()查詢支持的分辨率和幀率不要硬編碼。必做實(shí)操任務(wù)序號(hào)任務(wù)難度1實(shí)現(xiàn)相機(jī)預(yù)覽功能在 SurfaceProvider 上顯示實(shí)時(shí)畫(huà)面中2實(shí)現(xiàn)拍照功能將照片保存到本地中3實(shí)現(xiàn)前后攝像頭切換中4查詢?cè)O(shè)備相機(jī)能力并展示支持的分辨率列表低5實(shí)現(xiàn)連拍功能triggerBurstCapture高學(xué)習(xí)檢查清單能說(shuō)出相機(jī)開(kāi)發(fā)的核心流程CameraKit - Camera - FrameConfig能實(shí)現(xiàn)相機(jī)預(yù)覽并在 SurfaceProvider 上顯示能實(shí)現(xiàn)拍照并保存照片知道相機(jī)是獨(dú)占資源需要處理被占用的情況能使用 getCameraAbility 查詢?cè)O(shè)備相機(jī)能力能正確聲明相機(jī)相關(guān)權(quán)限能在 Ability 生命周期中正確釋放相機(jī)資源理解 FRAME_CONFIG_PREVIEW 和 FRAME_CONFIG_PICTURE 的區(qū)別進(jìn)階方向結(jié)合第 13 章視頻能力實(shí)現(xiàn)視頻錄制 App實(shí)現(xiàn)自定義相機(jī) UI手動(dòng)對(duì)焦、曝光調(diào)節(jié)、濾鏡等探索相機(jī)與 AI 能力的結(jié)合人臉檢測(cè)、掃碼等理解 FRAME_CONFIG_PREVIEW 和 FRAME_CONFIG_PICTURE 的區(qū)別進(jìn)階方向結(jié)合第 13 章視頻能力實(shí)現(xiàn)視頻錄制 App實(shí)現(xiàn)自定義相機(jī) UI手動(dòng)對(duì)焦、曝光調(diào)節(jié)、濾鏡等探索相機(jī)與 AI 能力的結(jié)合人臉檢測(cè)、掃碼等

相關(guān)新聞

Alamofire初探

Alamofire初探

Alamofire初探一. Alamofire概述二. URLSesstion基礎(chǔ)三、TCP的三次握手四、TCP數(shù)據(jù)的傳輸過(guò)程五、TCP的四次揮手一. Alamofire概述 對(duì)于使用Objective-C的開(kāi)發(fā)者,一定非常熟悉AFNetworking這個(gè)網(wǎng)絡(luò)框架。在蘋(píng)果推出的Swift之后,AFNetworking的作者專門(mén)用…

2026/7/28 19:18:31 閱讀更多
第14章_HarmonyOs開(kāi)發(fā)圖解 圖像

第14章_HarmonyOs開(kāi)發(fā)圖解 圖像

第14章 HarmonyOs開(kāi)發(fā)圖解 圖像HarmonyOS 學(xué)習(xí)系統(tǒng) | 階段三:高級(jí)深耕期學(xué)習(xí)目標(biāo)序號(hào)能力1掌握?qǐng)D像解碼(ImageSource)與編碼(ImagePacker)的完整流程2能夠使用 PixelMap 進(jìn)行像素級(jí)操作3掌握?qǐng)D像縮放、裁剪、EXIF 信息…

2026/7/28 19:18:31 閱讀更多
嵌入式設(shè)備與云端安全連接方案及優(yōu)化技巧

嵌入式設(shè)備與云端安全連接方案及優(yōu)化技巧

1. 項(xiàng)目背景與硬件選型解析當(dāng)我們需要在嵌入式設(shè)備與云端建立安全連接時(shí),硬件平臺(tái)的選擇直接影響著整個(gè)系統(tǒng)的性能和可靠性。這個(gè)項(xiàng)目中選用的A5000顯卡和TM4C123GH6PZ微控制器組合,恰好覆蓋了從邊緣計(jì)算到云端協(xié)同的全鏈路需求。NVIDIA RTX A5000作為專…

2026/7/29 4:16:02 閱讀更多
簡(jiǎn)易實(shí)現(xiàn)ssr

簡(jiǎn)易實(shí)現(xiàn)ssr

vue31. 項(xiàng)目結(jié)構(gòu)src/ ├── entry-server.js # 服務(wù)端入口 ├── entry-client.js # 客戶端入口(水合) ├── App.vue server.js # Node服務(wù) index.html # HTML模板2. 關(guān)鍵代碼server.js(Node 服務(wù))imp…

2026/7/29 4:16:02 閱讀更多
物聯(lián)網(wǎng)設(shè)備低功耗設(shè)計(jì):NBM7100A與STM32F765ZI優(yōu)化方案

物聯(lián)網(wǎng)設(shè)備低功耗設(shè)計(jì):NBM7100A與STM32F765ZI優(yōu)化方案

1. 項(xiàng)目背景與核心挑戰(zhàn)在物聯(lián)網(wǎng)設(shè)備和嵌入式系統(tǒng)設(shè)計(jì)中,紐扣電池(如CR2032)因其體積小、成本低、自放電率低等特性,常被用于為實(shí)時(shí)時(shí)鐘(RTC)、存儲(chǔ)器備份、傳感器等關(guān)鍵子系統(tǒng)供電。但這類不可充電的初級(jí)電…

2026/7/29 4:16:02 閱讀更多
A5000與PIC18LF25K80實(shí)現(xiàn)物聯(lián)網(wǎng)安全連接方案

A5000與PIC18LF25K80實(shí)現(xiàn)物聯(lián)網(wǎng)安全連接方案

1. 為什么選擇A5000與PIC18LF25K80組合在物聯(lián)網(wǎng)設(shè)備開(kāi)發(fā)領(lǐng)域,安全連接云端服務(wù)一直是個(gè)棘手的難題。我最近用A5000加密模塊搭配PIC18LF25K80微控制器完成了一個(gè)工業(yè)級(jí)安全連接方案,這套組合就像是給數(shù)據(jù)傳輸配備了專業(yè)保鏢和智能管家。A5000作為硬件加密…

2026/7/29 4:16:02 閱讀更多
從傾斜開(kāi)關(guān)到LED控制:嵌入式入門(mén)中的傳感器信號(hào)處理與消抖實(shí)踐

從傾斜開(kāi)關(guān)到LED控制:嵌入式入門(mén)中的傳感器信號(hào)處理與消抖實(shí)踐

1. 項(xiàng)目緣起:從“傾斜”到“點(diǎn)亮”的物理直覺(jué)最近在整理工作室的電子元件,翻出來(lái)一堆傾斜開(kāi)關(guān)和LED燈珠。看著這些不起眼的小玩意兒,我突然想到,很多朋友在入門(mén)電子制作時(shí),第一個(gè)接觸的互動(dòng)項(xiàng)目可能就是“按鈕控制LED”…

2026/7/29 4:16:02 閱讀更多
C++字符串?dāng)?shù)組輸入:從cin到getline的緩沖區(qū)管理與實(shí)戰(zhàn)避坑指南

C++字符串?dāng)?shù)組輸入:從cin到getline的緩沖區(qū)管理與實(shí)戰(zhàn)避坑指南

1. 項(xiàng)目概述:一個(gè)看似簡(jiǎn)單卻暗藏玄機(jī)的“入門(mén)級(jí)”問(wèn)題剛接觸C那會(huì)兒,字符串?dāng)?shù)組的輸入問(wèn)題,絕對(duì)是我踩過(guò)的第一個(gè)大坑。表面上看,不就是用個(gè)cin或者getline讀幾行字符串嘛,能有多復(fù)雜?但真上手寫(xiě)代碼&#…

2026/7/29 4:06:02 閱讀更多
面試官大笑:“一個(gè)任務(wù)拆給 5 個(gè) Subagent 并行跑,不比 1 個(gè)快 5 倍?“我搖頭:“快不了,還可能更慢“

面試官大笑:“一個(gè)任務(wù)拆給 5 個(gè) Subagent 并行跑,不比 1 個(gè)快 5 倍?“我搖頭:“快不了,還可能更慢“

前兩個(gè)月,我在重構(gòu) AlgoMooc 網(wǎng)站過(guò)程中,發(fā)現(xiàn)一個(gè)問(wèn)題:在 Claude Code 里把一個(gè)任務(wù)拆給 5 個(gè) Subagent 并行跑,結(jié)果可能比 1 個(gè) agent 從頭干到尾還慢? 大多數(shù)人的第一反應(yīng)是反過(guò)來(lái)的:活是并行干的&#…

2026/7/29 0:15:24 閱讀更多
# 鴻蒙 HarmonyOS 應(yīng)用開(kāi)發(fā)實(shí)戰(zhàn)(第25期)|骰子(Dice Roller)— Unicode 符號(hào)與動(dòng)畫(huà)渲染精講

# 鴻蒙 HarmonyOS 應(yīng)用開(kāi)發(fā)實(shí)戰(zhàn)(第25期)|骰子(Dice Roller)— Unicode 符號(hào)與動(dòng)畫(huà)渲染精講

一、應(yīng)用概述 骰子(Dice Roller) 是一款經(jīng)典的休閑娛樂(lè)應(yīng)用,模擬了真實(shí)擲骰子的過(guò)程。應(yīng)用投擲兩個(gè)骰子(六面標(biāo)準(zhǔn)骰),使用 Unicode 骰面符號(hào)直觀展示每個(gè)骰子的點(diǎn)數(shù),并伴有快速滾動(dòng)的動(dòng)畫(huà)效果?!?/p>

2026/7/29 0:15:24 閱讀更多