OpenHarmony实战开发-如何调用设备摄像头进行拍照、预览并将拍摄结果保存在媒体库中

场景说明

调用设备摄像头进行拍照、预览是许多应用开发过程中都需要的功能。在拍照完成时显示照片预览图可以确认拍摄的照片是否达到预期,本例将为大家介绍如何实现上述功能。

效果呈现

本例效果如下:

拍照	预览
contactlist	contactlist

运行环境

本例基于以下环境开发,开发者也可以基于其他适配的版本进行开发。

  • IDE:DevEco Studio 4.0.0.201 Beta1
  • SDK:Ohos_sdk_public 4.0.7.5 (APIVersion 10 Beta1)

实现思路

本例使用@ohos.multimedia.camera接口实现相机示例的主要功能:拍照、预览;

  • 拍照:XComponent组件负责绘制摄像头画面呈现的窗口,其onload事件调用cameraModel.ts的initCamera方法初始化相机功能输出画面信息。拍照动作使用Image组件实现,其onclick事件调用cameraModel.ts的takepicture方法开始拍照。
  • 预览:返回相机界面点击底部左侧预览图可进入相册应用,可以在其中查看照片和录制的视频。

开发步骤

1.申请所需权限

在model.json5中添加以下配置:

"requestPermissions": [
      {
   
   
        "name": "ohos.permission.CAMERA"//允许应用使用相机拍摄照片和录制视频
      },
      {
   
   
        "name": "ohos.permission.MICROPHONE"//允许应用使用麦克风
      },
      {
   
   
        "name": "ohos.permission.MEDIA_LOCATION"//允许应用访问用户媒体文件中的地理位置信息
      },
      {
   
   
        "name": "ohos.permission.WRITE_MEDIA"//允许应用读写用户外部存储中的媒体文件信息
      },
      {
   
   
        "name": "ohos.permission.READ_MEDIA"//允许应用读取用户外部存储中的媒体文件信息
      }
    ]

2.创建绘制组件XComponent以输出摄像头获取的画面,其绑定的onload方法中设定了画幅的大小。

build() {
   
   
    Column() {
   
   
      Title()
        .visibility(this.isTitleShow ? Visibility.Visible : Visibility.None) 
      Stack({
   
    alignContent: Alignment.Bottom }) {
   
   
        Stack({
   
    alignContent: Alignment.TopStart }) {
   
   
          XComponent({
   
   
            id: 'componentId',
            type: 'surface',
            controller: this.mXComponentController  //将控制器绑定至XComponent组件
          })
            .onLoad(() => {
   
   
              this.mXComponentController.setXComponentSurfaceSize({
   
    surfaceWidth: 640, surfaceHeight: 480 });//设置surface大小
              this.surfaceId = this.mXComponentController.getXComponentSurfaceId();
              this.currentModel = CameraMode.modePhoto; 
              this.cameraModel.initCamera(this.surfaceId); //调用model/cameraModel.ts初始化相机功能
            })
            .width('100%')
            .height('100%')
            .margin({
   
    bottom: 152 }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值