第15章_HarmonyOs开发图解之 相机
第15章 HarmonyOs开发图解之 相机HarmonyOS 学习系统 | 阶段三高级深耕期学习目标序号能力1掌握 HarmonyOS 相机开发的核心流程获取设备 - 配置 - 预览 - 拍照2理解 CameraKit、Camera、FrameConfig 三层架构3能够实现预览、拍照、连拍和录像功能核心图解内容讲解15.1 相机开发概述HarmonyOS 的相机开发基于三层架构CameraKit选角导演选择摄像头 -Camera摄影机实际拍摄设备 -FrameConfig拍摄脚本定义预览/拍照/连拍。Surface 则是监视器屏幕决定了画面显示在哪里。生活化类比相机开发就像指挥一场拍摄CameraKit是选角导演选择哪个摄像头——前置/后置Camera是摄影机实际的拍摄设备FrameConfig是拍摄脚本定义拍什么类型——预览/拍照/连拍Surface是监视器屏幕画面显示在哪里。流程是先选角获取相机 ID再架设摄影机createCamera然后排练configure 配置 Surface最后开拍triggerLoopingCapture 预览 / triggerSingleCapture 拍照。15.2 相机开发核心流程// 1. 获取相机设备列表CameraKitcameraKitCameraKit.getInstance(context);String[]cameraIdscameraKit.getCameraIds();// 2. 创建相机实例cameraKit.createCamera(cameraIds[0],cameraStateCallback,eventHandler);// 3. 相机创建成功回调中配置 SurfaceOverridepublicvoidonCreated(Cameracamera){CameraConfig.BuilderbuildernewCameraConfig.Builder();builder.addSurface(previewSurface);// 预览 Surfacebuilder.addSurface(pictureSurface);// 拍照 Surfacebuilder.setFrameStateCallback(frameStateCallback,eventHandler);camera.configure(builder.build());}// 4. 配置完成回调中开始预览OverridepublicvoidonConfigured(Cameracamera){FrameConfigpreviewConfigcamera.getFrameConfigBuilder(FrameConfig.FRAME_CONFIG_PREVIEW).build();camera.triggerLoopingCapture(previewConfig);// 开始预览}// 5. 拍照FrameConfigpictureConfigcamera.getFrameConfigBuilder(FrameConfig.FRAME_CONFIG_PICTURE).build();camera.triggerSingleCapture(pictureConfig);15.3 相机能力查询不同设备的相机能力差异极大开发前务必查询// 查询相机支持的分辨率和帧率CameraAbilityabilitycameraKit.getCameraAbility(cameraIds[0]);Size[]sizesability.getSupportedSizes(FrameConfig.FRAME_CONFIG_PREVIEW);for(Sizesize:sizes){HiLog.info(TAG,支持预览分辨率: size.widthxsize.height);}15.4 相机权限清单权限用途必要性ohos.permission.CAMERA使用相机硬件必选ohos.permission.MICROPHONE录像时录音可选ohos.permission.WRITE_MEDIA保存照片/视频到外部存储可选ohos.permission.MEDIA_LOCATION保存位置信息到照片可选代码速查卡API功能示例CameraKit.getInstance(ctx)获取 CameraKit 实例CameraKit.getInstance(context)getCameraIds()获取相机 ID 列表cameraKit.getCameraIds()createCamera(id, cb, handler)创建相机实例cameraKit.createCamera(ids[0], cb, handler)configure(config)配置相机 Surfacecamera.configure(config)triggerLoopingCapture(fc)开始预览循环捕获camera.triggerLoopingCapture(previewConfig)triggerSingleCapture(fc)拍照单次捕获camera.triggerSingleCapture(pictureConfig)getCameraAbility(id)查询相机能力cameraKit.getCameraAbility(cameraId)release()释放相机资源camera.release()与 Android/iOS 对比特性HarmonyOSAndroidiOS相机 APICameraKit CameraCamera2 API / CameraXAVFoundation (AVCaptureSession)预览方式SurfaceProvider SurfaceSurfaceView / PreviewViewAVCaptureVideoPreviewLayer拍照方式triggerSingleCaptureImageReader CaptureRequestAVCapturePhotoOutput相机选择cameraIds[0]/[1]CameraCharacteristics.LENS_FACINGAVCaptureDevice.default()能力查询getCameraAbility()CameraCharacteristicsAVCaptureDevice.DeviceType⚠️ 踩坑回忆录为什么相机一直打开失败我写了一个带相机的 App启动时直接调用CameraKit.getInstance()结果总是返回 null。排查后发现——另一个相机 App 还在后台运行HarmonyOS 规定同一时刻只有一个相机应用能运行因为摄像头是独占硬件资源。正确做法是先检查相机是否可用提示用户关闭其他相机 App或者使用try-catch捕获异常并给出友好提示。另外不同设备的相机能力差异极大。我曾在 A 设备上完美运行的 4K 预览在 B 设备上直接黑屏——因为 B 设备最高只支持 1080P 预览。开发前务必用CameraKit.getCameraAbility()查询支持的分辨率和帧率不要硬编码。必做实操任务序号任务难度1实现相机预览功能在 SurfaceProvider 上显示实时画面中2实现拍照功能将照片保存到本地中3实现前后摄像头切换中4查询设备相机能力并展示支持的分辨率列表低5实现连拍功能triggerBurstCapture高学习检查清单能说出相机开发的核心流程CameraKit - Camera - FrameConfig能实现相机预览并在 SurfaceProvider 上显示能实现拍照并保存照片知道相机是独占资源需要处理被占用的情况能使用 getCameraAbility 查询设备相机能力能正确声明相机相关权限能在 Ability 生命周期中正确释放相机资源理解 FRAME_CONFIG_PREVIEW 和 FRAME_CONFIG_PICTURE 的区别进阶方向结合第 13 章视频能力实现视频录制 App实现自定义相机 UI手动对焦、曝光调节、滤镜等探索相机与 AI 能力的结合人脸检测、扫码等理解 FRAME_CONFIG_PREVIEW 和 FRAME_CONFIG_PICTURE 的区别进阶方向结合第 13 章视频能力实现视频录制 App实现自定义相机 UI手动对焦、曝光调节、滤镜等探索相机与 AI 能力的结合人脸检测、扫码等

相关新闻

音乐解锁终极指南:3分钟打破平台限制,重获音乐自由 [特殊字符]

音乐解锁终极指南:3分钟打破平台限制,重获音乐自由 [特殊字符]

音乐解锁终极指南:3分钟打破平台限制,重获音乐自由 🎵 【免费下载链接】unlock-music 在浏览器中解锁加密的音乐文件。原仓库: 1. https://github.com/unlock-music/unlock-music ;2. https://git.unlock-music.dev/um…

2026/7/28 19:17:28 阅读更多 →
gdbserver调试安卓

gdbserver调试安卓

gdbserver远程调试安卓程序,可以按照以下步骤:在安卓上:1、将相应配套的gdbserver拷贝到安卓设备上,然后执行以下命令:在安卓设备上可以两种方式启动gdbserver(1)、手动跑可执行程序./gdbserver…

2026/7/28 19:17:28 阅读更多 →
TestDisk数据恢复终极指南:免费开源工具拯救丢失分区与文件的完整方法

TestDisk数据恢复终极指南:免费开源工具拯救丢失分区与文件的完整方法

TestDisk数据恢复终极指南:免费开源工具拯救丢失分区与文件的完整方法 【免费下载链接】testdisk TestDisk & PhotoRec 项目地址: https://gitcode.com/gh_mirrors/te/testdisk 当你的硬盘分区突然消失,或者重要文件被意外删除时,…

2026/7/28 19:17:28 阅读更多 →

最新新闻

动画资源标准化命名与管理实战指南

动画资源标准化命名与管理实战指南

1. 项目背景解析"dragonballsuper_085-2"这个命名格式明显指向日本经典动漫《龙珠超》的剧集资源。作为东映动画制作的《龙珠》系列正统续作,该动画自2015年播出以来持续引发全球粉丝热潮。这种以"作品名集数"的编号规则,常见于动画…

2026/7/28 19:30:33 阅读更多 →
停止所有新闻类APP自动评价

停止所有新闻类APP自动评价

原因非常简单:新闻类型app容易被操社会舆论,所以监管很严格。简单说就是:新闻类型app的评论,全部抖音先审核,然后才允许发出去被看到,而自媒体是先发出去,有人举报再删除。----机器审核--------…

2026/7/28 19:30:33 阅读更多 →
想要自动化一定不能从网页下载短视频APP-----例如抖音

想要自动化一定不能从网页下载短视频APP-----例如抖音

https://blog.csdn.net/geniusChinaHN/article/details/163276414? 国家机密

2026/7/28 19:30:33 阅读更多 →
国内环境部署本地化AI编程助手:从DeepSeek模型到桌面集成全攻略

国内环境部署本地化AI编程助手:从DeepSeek模型到桌面集成全攻略

在实际开发中,我们经常需要与大型语言模型(LLM)进行交互,无论是用于代码生成、文档编写还是问题解答。直接使用网页版或简单的API调用往往效率不高,尤其是在处理多个并行任务、管理上下文或集成到本地开发工作流时。Co…

2026/7/28 19:30:33 阅读更多 →
算不准,活得好:从“人算不如天算”到“活的系统”

算不准,活得好:从“人算不如天算”到“活的系统”

一、先说个小事 你有没有过这种感觉—— 小时候做数学题,公式一套,答案就出来了,特别爽,觉得“万物皆可算”。长大以后发现,生活里好多事情,你越算越不对,越规划越跑偏。你把每一步都想好了&…

2026/7/28 19:30:33 阅读更多 →
改进烟花算法在图像阈值分割中的MATLAB实现

改进烟花算法在图像阈值分割中的MATLAB实现

1. 项目概述这个项目将传统烟花算法(Fireworks Algorithm, FWA)进行改进优化,并应用于图像阈值分割领域。图像阈值分割是计算机视觉中的基础任务,其核心在于找到最佳阈值将图像分为前景和背景。传统方法如Otsu、最大熵法等在复杂场景下效果有限&#xff…

2026/7/28 19:29:33 阅读更多 →

日新闻

告别臃肿!3步让你的暗影精灵笔记本重获新生

告别臃肿!3步让你的暗影精灵笔记本重获新生

告别臃肿!3步让你的暗影精灵笔记本重获新生 【免费下载链接】OmenSuperHub Control Omen laptop performance, fan speeds, and keyboard lighting, and unlock power limits. 项目地址: https://gitcode.com/gh_mirrors/om/OmenSuperHub 你是否也曾为官方Om…

2026/7/28 0:00:43 阅读更多 →
RAG必踩坑!财报法规检索不准?这款开源工具让答案浮出水面,准确率飙升98.7%!

RAG必踩坑!财报法规检索不准?这款开源工具让答案浮出水面,准确率飙升98.7%!

做 RAG 的人应该都踩过这个致命的坑:把几百页的财报、法规、技术手册扔给向量库,问一个具体问题,搜出来的全是沾边但没用的内容 —— 关键信息要么被硬切块拆碎了,要么藏在几十条结果的最下面。语义相似≠真正相关,这个…

2026/7/28 0:00:43 阅读更多 →
抖音视频文案提取工具全指南:免费2026版、手机App、在线工具一网打尽

抖音视频文案提取工具全指南:免费2026版、手机App、在线工具一网打尽

2026年做短视频运营,从抖音上扒文案早就不是偷偷抄笔记的事了。我刚开始做内容的时候,每天刷半小时抖音,手动把爆款视频的口播敲进备忘录,一条2分钟的视频得花十来分钟,碰到语速快的还要反复回听。后来试了一圈工具&am…

2026/7/28 0:00:43 阅读更多 →

周新闻

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 数据集6000张 完整源码已标注数据集训练好的模型环境配置教程程序运行说明文档,可以直接使用!系统支持图片、视频、摄像头等多种方式检测裂缝,功能强大实用。 1数据集6000张 8各类别

2026/7/28 12:04:22 阅读更多 →
深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

pubg数据集 精选原图1.42万数据 1.49万标签 无任何重复、算法增强或冗余图像! pubg绝地求生目标检测数据集 1分类:e_body,14905个标签,txt格式 共计14244张图,99%为640*640尺寸图像 适合yolo目标检测、AI训练关键词&am…

2026/7/28 8:29:16 阅读更多 →
Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex检测数据集数据集详情检测类别: allies enemy tag图片总量:7247张训练集:5139张验证集:1425张测试集:683张标注状态:全部已标注,即拿即用数据格式:支持YOLO格式及其他格式&#…

2026/7/28 5:03:42 阅读更多 →

月新闻