• Home
Name Date Size #Lines LOC

..--

AppScope/06-May-2025-3432

app_pic/06-May-2025-

entry/06-May-2025-6,1355,351

hvigor/06-May-2025-3433

.gitignoreD06-May-2025119 1111

README.mdD06-May-202511.4 KiB130103

build-profile.json5D06-May-20251.2 KiB5050

hvigorfile.tsD06-May-2025234 75

hvigorwD06-May-20251.4 KiB4928

hvigorw.batD06-May-20251.5 KiB6547

oh-package.json5D06-May-2025233 1312

README.md

1# 相机
2
3### 介绍
4
5本示例主要展示了相机的相关功能,使用[@ohos.multimedia.camera](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis-camera-kit/js-apis-camera.md)等接口实现相机的预览、拍照、录像、前后置摄像头切换进行拍照、录像,以及闪光灯、变焦、对焦、曝光等控制类功能。
6
7### 效果预览
8
9| 相机权限                     | 麦克风权限                   | 图片和视频权限               |
10| --------------------------- | --------------------------- | --------------------------- |
11|  <img src="./app_pic/auth1.jpg" width="300" /> | <img src="./app_pic/auth2.jpg" width="300" /> | <img src="./app_pic/auth3.jpg" width="300" /> |
12
13| 预览界面                         | 设置界面                         |
14| ------------------------------- | ------------------------------- |
15| <img src="./app_pic/preview.jpg" width="300" /> | <img src="./app_pic/setting.jpg" width="300" /> |
16
17使用说明
18(因RK3568设备硬件能力,现仅支持验证1、2、3、8、9、12)
19
201. 弹出是否允许“Camera_js”使用相机?点击“允许”
212. 弹出是否允许“Camera_js”使用麦克风?点击“允许”
223. 弹出是否允许“Camera_js”访问图片和视频?点击“允许”
234. 进入预览界面,预览正常,点击画面模糊处,点击处画面会变得清晰,对焦效果明显
245. 进入预览界面,预览正常,上下滑动屏幕,屏幕场景亮度发生变化,曝光效果明显
256. 进入预览界面,预览正常,点击闪光灯按钮,打开闪光灯,闪光灯正常打开
267. 进入预览界面,预览正常,点击闪光灯按钮,关闭闪光灯,闪光灯关闭
278. 进入预览界面,预览正常,进入拍照模式,点击拍照按钮,拍照正常,左下角会生成照片缩略图
289. 进入预览界面,预览正常,切换到录像模式,点击录像,开始录像,再点击停止录像按钮,录像成功,左下角会生成视频缩略图
2910. 进入预览界面,预览正常,切换到前置摄像头,点击拍照按钮,拍照正常,左下角会生成照片缩略图
3011. 进入预览界面,预览正常,切换到前置摄像头,切换到录像模式,点击录像,开始录像,再点击停止录像按钮,录像成功,左下角会生成视频缩略图
3112. 点击设置按钮,会弹出设置页面,仅验证UI
32
33### 工程目录
34
35```
36entry/src/main
37|-- ets
38|   |-- Application
39|   |-- |-- MyAbilityStage.ts               // AbilityStage的生命周期回调内容
40|   |-- common
41|   |   |-- CameraConfig.ts                 // 相机配置信息
42|   |   |-- Constants.ts					// 基本参数枚举:纵横比、设备类型、视频帧数
43|   |   |-- DisplayCalculator.ts			// 计算界面宽高显示数值
44|   |   |-- GlobalContext.ts			    // 全局上下文
45|   |   |-- settingItem.ets					// 设置栏
46|   |   |-- SettingList.ets					// 设置栏跳转配置
47|   |   |-- settingPublicLayout.ets			// 设置栏公共区域
48|   |   |-- settingRightLayout.ets			// 设置栏右边区域
49|   |-- Dialog
50|   |   |-- RecodeStopDialog.ets			// 停止录像弹框
51|   |   |-- SettingDialog.ets			    // 相机APP设置界面布局
52|   |-- Entryability
53|   |   |-- EntryAbility.ts					// Ability的生命周期回调内容
54|   |-- MainAbility
55|   |   |-- MainAbility.ts					// 对Ability生命周期管理
56|   |-- model
57|   |   |-- CameraService.ts				// 相机功能实现
58|   |   |-- DateTimeUtil.ts					// 日期工具
59|   |   |-- Logger.ts						// 日志工具
60|   |-- pages
61|   |   |-- Index.ets						// Ability实现的应用的入口页面,相机APP首页
62|   `-- views
63|       |-- CountdownPage.ets				// 倒计时UI页面布局
64|       |-- DividerPage.ets					// 分割线UI布局
65|       |-- FlashingLightPage.ets			// 闪光灯UI界面布局
66|       |-- FocusAreaPage.ets				// 对焦区域设置(焦点、侧光点)、单指竖直方向拖动触发曝光补偿设置
67|       |-- FocusPage.ets					// 变焦、对焦、曝光、刻度的图标设置、值的设置
68|       |-- ModeSwitchPage.ets				// 相机功能模式切换,开启预览、拍照、录像
69|       |-- SlidePage.ets					// 滑动滑块UI界面布局
70
71```
72
73### 具体实现
74* 相机功能接口实现在CameraService.ts中,源码参考:[CameraService.ts](entry/src/main/ets/model/CameraService.ts)
75    * 在initCamera接口里完成一个相机生命周期初始化的过程,包括调用getCameraManagerFn获取相机管理器实例,调用getSupportedCamerasFn获取支持的camera设备,调用initProfile初始化设备能力集,调用createPreviewOutputFn创建预览输出, 调用previewOutputCallBack监听预览事件,调用createPhotoOutputFn创建拍照输出流,调用photoOutPutCallBack监听拍照事件,调用createCameraInputFn创建相机输入,调用cameraInputOpenFn打开相机,调用onCameraStatusChange监听镜头状态,调用onCameraInputChange监听CameraInput的错误事件。
76    * 在photoSessionFlowFn接口里开启拍照预览的动作,主要流程包括:调用createSession创建PhotoSession实例,调用beginConfig开始配置会话,调用addInput把cameraInput加入到会话,调用addOutput把previewOutput加入到会话,调用addOutput把photoOutPut加入到会话,调用setColorSpace设置色域,调用commitConfig提交配置信息,调用start开始会话工作。
77    * 在takePicture接口里执行拍照动作,主要流程包括:调用capture执行拍照,拍照完成时回调photoOutPut的photoAvailable监听,调用savePicture接口保存照片。
78    * 在videoSessionFlowFn接口里开启录像预览的动作,主要流程包括:调用createSession创建VideoSession实例,调用beginConfig开始配置会话,调用addInput把cameraInput加入到会话,调用addOutput把previewOutput加入到会话,调用addOutput把videoOutPut加入到会话,调用setColorSpace设置色域,调用commitConfig提交配置信息,调用start开始会话工作。
79    * 在startVideo接口里执行录像工作,主要流程包括:调用videoOutput的start和videoRecorder的start接口启动录制。
80    * 闪光灯功能相关接口封装在HasFlashFn接口中,主要包含以下流程:调用hasFlash检测是否支持闪光灯设备,再调用isFlashModeSupported检测闪光灯模式是否支持,然后调用setFlashMode设置闪光灯模式,最后调用getFlashMode获取当前设备的闪光灯模式。
81    * 变焦功能相关接口封装在setZoomRatioFn接口中,主要包含以下流程:调用getZoomRatioRange获取支持的变焦范围,调用setZoomRatio设置变焦,调用getZoomRatio获取当前设备的变焦值。
82    * 曝光功能相关接口封装在IsExposureModeSupportedFn接口中,主要包含以下流程:调用isExposureModeSupported判断是否支持曝光模式,然后调用setExposureMode设置曝光模式,调用getExposureMode获取设置后的曝光模式。调用IsExposureBiasRange接口获取曝光补偿,其中包含调用getExposureBiasRange获取曝光补偿的范围,调用setExposureBias设置曝光点。
83    * 对焦功能相关接口封装在isFocusMode接口中,主要包含以下流程:调用isFocusModeSupported判断是否支持对焦模式,调用setFocusMode设置对焦模式。调用IsFocusPoint接口获取对焦点,其中包括调用setFocusPoint设置对焦点位,然后调用getFocusPoint获取设置后的对焦点位。
84    * 视频防抖功能相关接口封装在IsVideoStabilizationModeSupportedFn接口中,主要包含以下流程:调用OisVideoStabilizationModeSupported接口查询是否支持指定的视频防抖模式,调用setVideoStabilizationMode设置视频防抖,调用getActiveVideoStabilizationMode获取设置后的视频防抖模式。
85
86* 相机预览、拍照、录像功能、前后置切换功能实现调用侧位于Index.etsmodeSwitchPage.etsCameraService.ts中,源码参考:[Index.ets](entry/src/main/ets/pages/Index.ets),[ModeSwitchPage.ets](entry/src/main/ets/views/ModeSwitchPage.ets),[CameraService.ts](entry/src/main/ets/model/CameraService.ts)
87    * 预览:开启预览位于Index.ets下的onPageShow接口,其中调用CameraService.initCamera接口,将预览的surfaceId,摄像头id作为入参传下去,完成开启相机的操作,开启预览。
88    * 拍照和录像:开启拍照位于ModeSwitchPage.ets下的isVideoPhotoFn接口,通过判断modelBagCol的值是photo还是vide。如果是拍照模式,调用CameraService.takePicture接口开启拍照。如果是录像模式,调用CameraService.startVideo接口开启录像。
89    * 前后置切换:前后置摄像头切换接口位于ModeSwitchPage.ets,切换cameraDeviceIndex,将先前的session配置释放,CameraService.initCamera接口,将预览的surfaceId,摄像头id作为入参传下去,先释放之前的session,然后进行初始化操作开启预览。
90
91
92* 相机闪光灯、变焦、对焦、曝光功能实现调用侧位于FlashingLightPage.etsSlidePage.etsFocusAreaPage.ets中,源码参考:[FlashingLightPage.ets](entry/src/main/ets/views/FlashingLightPage.ets),[SlidePage.ets](entry/src/main/ets/views/SlidePage.ets),[FocusAreaPage.ets](entry/src/main/ets/views/FocusAreaPage.ets),[CameraService.ts](entry/src/main/ets/model/CameraService.ts)
93    * 闪光灯:闪光灯功能位于FlashingLightPage.ets,getImageDefault接口用作在点击闪光灯图标之后选择闪光灯模式,0代表关闭,1代表打开,2是自动,3是常亮。然后在build中通过CameraService.hasFlash接口调用到CameraService.ts中的HasFlash接口,完成闪光灯功能的实现。
94    * 变焦:变焦功能位于SlidePage.ets,通过调用slideChange接口设置slide滑块的值,目前只支持1-6.然后调用CameraService.setZoomRatioFn接口完成变焦功能的实现。
95    * 对焦:对焦功能位于FocusAreaPage.ets,通过调用CameraService.isFocusPoint完成对焦功能实现。
96    * 曝光:曝光功能位于FocusAreaPage.ets,通过调用CameraService.isMeteringPoint完成曝光功能。
97
98### 相关权限
99
100[ohos.permission.CAMERA](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis-camera-kit/js-apis-camera.md)
101
102[ohos.permission.MICROPHONE](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/security/AccessToken/permissions-for-all.md#ohospermissionmicrophone)
103
104[ohos.permission.READ_MEDIA](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/security/AccessToken/permissions-for-all.md#ohospermissionread_media)
105
106[ohos.permission.WRITE_MEDIA](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/security/AccessToken/permissions-for-all.md#ohospermissionwrite_media)
107
108[ohos.permission.READ_IMAGEVIDEO](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/security/AccessToken/permissions-for-system-apps.md#ohospermissionread_imagevideo)
109
110### 依赖
111
112不涉及
113
114### 约束与限制
115
1161. 本示例支持标准系统上运行,支持设备:RK3568;
1172. 本示例为Stage模型,已适配API version 12版本SDK,SDK版本号(API Version 12 Release),镜像版本号(5.0Release);
1183. 本示例需要使用DevEco Studio 版本号(4.0.0.600)及以上版本才可编译运行。
119
120### 下载
121
122如需单独下载本工程,执行如下命令:
123
124```
125git init
126git config core.sparsecheckout true
127echo code/BasicFeature/Media/Camera_js > .git/info/sparse-checkout
128git remote add origin https://gitee.com/openharmony/applications_app_samples.git
129git pull origin master
130```