HarmonyOS鸿蒙Next中调用系统相机进行拍照示例

HarmonyOS鸿蒙Next中调用系统相机进行拍照示例 调用系统相机进行拍照示例

3 回复

打开相机并拍照Demo:

import common from '@ohos.app.ability.common';


@Entry
@Component
struct ImagePickerPage {
  @State message: string = 'Hello World';

  build() {
    Row() {
      Column() {
        Text(this.message)
          .fontSize(50)
          .fontWeight(FontWeight.Bold)

        Button("camera Image").onClick(() => {
          const context = getContext(this) as common.UIAbilityContext
          console.log('sss')
          context.startAbilityForResult({
            action:"ohos.want.action.imageCapture",
            parameters:{
              callBundleName:"com.hm.imageshow"
              //拉起系统相机拍照后返回的应用包名
            }
          },(err, data) => {
            console.info("context:" + JSON.stringify(context))
            console.info("imageCapture:" + JSON.stringify(data))
          })
        })
      }
      .width('100%')
    }
    .height('100%')
  }
}

获取相片uri数据可以采用下列方法:

let uri: string = (data?.want?.parameters as Record<string, Object))['resourceUri']?.toString(); //获取相片uri数据

更多关于HarmonyOS鸿蒙Next中调用系统相机进行拍照示例的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中,调用系统相机进行拍照主要依赖CameraKitIntent。以下是一个简单的示例代码,展示如何调用系统相机并获取拍照结果:

  • 添加权限:在config.json中添加相机权限:

    {
      "module": {
        "reqPermissions": [
          {
            "name": "ohos.permission.CAMERA"
          }
        ]
      }
    }
    
  • 创建相机调用代码

    import camera from '[@ohos](/user/ohos).multimedia.camera';
    import abilityAccessCtrl from '[@ohos](/user/ohos).abilityAccessCtrl';
    import featureAbility from '[@ohos](/user/ohos).ability.featureAbility';
    
    // 请求相机权限
    async function requestCameraPermission() {
      let atManager = abilityAccessCtrl.createAtManager();
      try {
        await atManager.requestPermissionsFromUser(featureAbility.getContext(), ['ohos.permission.CAMERA']);
      } catch (err) {
        console.error('Failed to request camera permission:', err);
      }
    }
    
    // 调用系统相机拍照
    async function takePhoto() {
      await requestCameraPermission();
      const cameraKit = camera.getCameraKit();
      const cameras = await cameraKit.getCameras();
      if (cameras.length > 0) {
        const cameraDevice = cameras[0];
        const photoOutput = await cameraDevice.createPhotoOutput();
        const captureSession = await cameraKit.createCaptureSession();
        await captureSession.beginConfig();
        await captureSession.addOutput(photoOutput);
        await captureSession.commitConfig();
        await captureSession.start();
        const photo = await photoOutput.capture();
        console.log('Photo captured:', photo);
      }
    }
    
  • 处理拍照结果:拍照结果可以通过photoOutput.capture()返回的Photo对象进行处理。

  • 清理资源:在拍照完成后,确保释放相机资源:

    async function releaseCamera() {
      const cameraKit = camera.getCameraKit();
      const cameras = await cameraKit.getCameras();
      if (cameras.length > 0) {
        const cameraDevice = cameras[0];
        await cameraDevice.release();
      }
    }
    

以上代码展示了如何在HarmonyOS鸿蒙Next中调用系统相机进行拍照,并处理拍照结果。

在HarmonyOS鸿蒙Next中,调用系统相机进行拍照可以通过以下步骤实现:

  1. 配置权限:在config.json中声明相机权限。
"reqPermissions": [
  {
    "name": "ohos.permission.CAMERA"
  }
]
  1. 创建相机Intent:使用Intent对象设置相机操作。
Intent intent = new Intent();
Operation operation = new Intent.OperationBuilder()
    .withAction("android.media.action.IMAGE_CAPTURE")
    .build();
intent.setOperation(operation);
  1. 启动相机:调用startAbilityForResult启动相机并获取拍照结果。
startAbilityForResult(intent, REQUEST_CODE_CAMERA);
  1. 处理拍照结果:在onAbilityResult中接收并处理拍照返回的图片数据。
@Override
protected void onAbilityResult(int requestCode, int resultCode, Intent resultData) {
    if (requestCode == REQUEST_CODE_CAMERA && resultCode == RESULT_OK) {
        // 处理返回的图片数据
    }
}

通过以上步骤,即可在HarmonyOS鸿蒙Next中调用系统相机进行拍照。

回到顶部