# 相机切换不同分辨率
介绍
本示例主要展示了相机切换不同分辨率的功能, 接口实现相机的预览拍照录像功能。
效果预览
| 预览 |
|---|
![]() |
使用说明
- 弹出“是否允许CameraKitSample使用相机?”,点击“允许”。
- 弹出“是否允许CameraKitSample使用麦克风?”,点击“允许”。
- 进入预览界面,选择一个分辨率,当前预览界面显示正常。
- 进入预览界面,预览正常,选择一个分辨率,点击拍照按钮,跳转到图片预览页面,跳转正常,图片预览页面显示当前所拍照的图片,显示正常。
- 进入预览界面,预览正常,选择一个分辨率,点击拍照按钮,跳转到图片预览页面,跳转正常,图片预览页面显示当前所拍照的图片,显示正常,退出应用并进入图库应用,第一张图片显示为刚刚拍照的图片,拍照正常。
- 点击图片预览页面的左上角返回按钮,重新进入预览页面,预览正常。
- 进入预览界面,预览正常,点击“拍照”旁边的“录像”切换到录像模式,选择一个分辨率,预览正常,点击录像按钮,开始录像,录像正常,点击停止录像按钮,跳转到录像预览界面,跳转正常,点击视频播放按钮,播放正常。
工程目录
├──entry/src/main/ets
│ ├──common
│ │ ├──utils
│ │ │ ├──Logger.ets // 日志工具
│ │ │ └──GlobalContext.ets // 全局上下文工具
│ │ └──Constants.ets // 基本参数枚举:分辨率、icon大小、按钮边距...
│ ├──entryability
│ │ └──EntryAbility.ets // Ability的生命周期回调内容
│ ├──pages
│ │ ├──Index.ets // Ability实现的应用的入口页面,相机APP首页
│ │ └──EditPage.ets // 提供拍照后图片预览和编辑页面
│ ├──model1
│ │ └──CameraService.ets // 相机初始化、分辨率选择、打开摄像头、调整焦距等功能
│ └──views
│ ├──ModeComponent.ets // 拍照录制组件
│ └──SlideComponent.ets // 变焦滑动条组件,可以对预览画面焦距进行改变
└──entry/src/main/resources // 应用资源目录
具体实现
- 这里重点介绍相机分辨率功能的实现:
- 分辨率选择位于Index.ets下的select组件的onSelect接口中,其中随用户选择更新选中索引,表明用户希望选中的分辨率,并且调用了Index.ets中的分辨率变更处理方法onResolutionChanged, onResolutionChanged主要将用户选择的分辨率以及其他参数传入initCamera2方法。
- 在CameraService的initCamera2函数里完成一个相机生命周期初始化的过程,包括调用getCameraManager获取CameraManager,调用getSupportedCameras获取支持的camera设备,调用getSupportedOutputCapability获取支持的camera设备能力集,调用createPreviewOutput创建预览输出,调用createCameraInput创建相机输入,调用CameraInput的open打开相机输入,调用onCameraStatusChange创建CameraManager注册回调,最后调用sessionFlowFn创建并开启Session。
- 其中在CameraService的initCamera2函数中与分辨率相关的业务流程是在selectProfileForPreviewAndVideo()函数中,该函数会创建与用户预期分辨率严格匹配的视频与预览配置文件,还有getPhotoProfile()函数,该函数会创建与用户预期分辨率一致的拍照配置文件,initcamera2后续流程将使用这些配置文件创建输出流。
- 手机硬件并不支持预览录像模式下一些特殊情况的分辨率,见下表中画斜线表格,针对这些特殊情况,统一配置默认分辨率为1920 * 1080,该配置在Index.ets文件中的selectedResolutionIndex变量初始化值为7,指向分辨率数组resolutionOptions下标为7元素,即1920 * 1080。
相关权限
- ohos.permission.CAMERA
- ohos.permission.MICROPHONE
依赖
不涉及
约束与限制
-
本示例仅支持标准系统上运行,支持设备:华为手机。
-
本示例支持API20版本SDK,版本号:6.0.0.47。
-
本示例已支持使DevEco Studio 6.0.0 Release(构建版本:6.0.0.858,构建 2025年9月25日)编译运行。
下载
如需单独下载本工程,执行如下命令:
git init
git config core.sparsecheckout true
echo MediaLibraryKit/MediaResourceChangeNotificationsSample/ > .git/info/sparse-checkout
git remote add origin https://gitee.com/openharmony/applications_app_samples.git
git pull origin master
