HarmonyOS 鸿蒙Next相机预览

发布于 1周前 作者 phonegap100 来自 鸿蒙OS

HarmonyOS 鸿蒙Next相机预览 请提供相机预览的代码示例,不知道怎么实现

5 回复
import common from '@ohos.app.ability.common';
import camera from '@ohos.multimedia.camera';
import { BusinessError } from '@ohos.base';
import { abilityAccessCtrl, PermissionRequestResult, Permissions } from '@kit.AbilityKit';

async function previewCamera(baseContext: common.BaseContext, surfaceId: string): Promise<void> {
  let cameraManager: camera.CameraManager = camera.getCameraManager(baseContext);
  let cameraArray: Array<camera.CameraDevice> = cameraManager.getSupportedCameras();
  let cameraInput: camera.CameraInput | undefined = undefined;
  try{
    cameraInput = cameraManager.createCameraInput(cameraArray[0]);
    cameraInput.on('error', cameraArray[0], (error: BusinessError) => {
      console.error(`Camera input error code: ${error.code}`);
    });

    await cameraInput.open();

  } catch (e) {
    let error:BusinessError = e as BusinessError;
    console.error(`${error.code}:${error.message}`)
  }
  let cameraOutputCap: camera.CameraOutputCapability = cameraManager.getSupportedOutputCapability(cameraArray[0]);
  let previewProfilesArray: Array<camera.Profile> = cameraOutputCap.previewProfiles;
  if (!previewProfilesArray) {
    console.error("cameraManager.getSupportedOutputCapability error");
    return undefined;
  }
  let previewOutput: camera.PreviewOutput | undefined = undefined;
  previewOutput = cameraManager.createPreviewOutput(previewProfilesArray[0], surfaceId);
  let captureSession: camera.PhotoSession | undefined = undefined;
  captureSession = cameraManager.createSession(camera.SceneMode.NORMAL_PHOTO) as camera.PhotoSession;
  try {
    captureSession.beginConfig();
    captureSession.addInput(cameraInput);
    captureSession.addOutput(previewOutput);
    await captureSession.commitConfig();
    await captureSession.start();

  } catch (e) {
    let error: BusinessError = e as BusinessError;
    console.error(`${error.code}:${error.message}`)
  }
}

@Entry
@Component
export struct CameraPage {
  @StorageProp('statusBarHeight') statusBarHeight: number = 0;
  private xcomponentController: XComponentController = new XComponentController;
  private surfaceId: string = '';

  requestCameraPermission(): void {
    let permission: Permissions[] = ['ohos.permission.CAMERA'];
    let context: Context = getContext(this) as Context;
    let atManager: abilityAccessCtrl.AtManager = abilityAccessCtrl.createAtManager();
    atManager.requestPermissionsFromUser(context, permission).then((data: PermissionRequestResult) => {
      let grantStatus: Array<number> = data.authResults;
      let length: number = grantStatus.length;
      for (let i = 0; i < length; i++) {
        if (grantStatus[i] != 0) {
          return;
        }
      }
      // 授权成功
    }).catch((err: BusinessError) => {
      console.error(`${err.code}:${err.message}`)
    })
  }

  async aboutToAppear(): Promise<void> {
    this.requestCameraPermission()
  }

  build() {
    Column() {
      Row() {
        XComponent({
          id: 'xcomponent',
          type: XComponentType.SURFACE,
          controller: this.xcomponentController
        })
          .onLoad(() => {
            this.xcomponentController.setXComponentSurfaceSize({ surfaceWidth: 1920, surfaceHeight: 1080 });
            this.surfaceId = this.xcomponentController.getXComponentSurfaceId()
          })
          .width('720px')
          .height('480px')
      }
      .backgroundColor(Color.Black)

      Button("开始预览")
        .onClick(() => {
          previewCamera(getContext(this), this.surfaceId);
        })
    }
  }
}

更多关于HarmonyOS 鸿蒙Next相机预览的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


大佬怎么获取预览的图片啊就是打开预览后自动捕获的照片,

您好,建议您另外提个新的问题帖子,我们的技术支持人员会在论坛中定期扫描提问的技术问题并回复,您的问题如果放到评论里面是扫描不到的。

预览图片是什么意思。上面输出的是预览流数据,你如果想获取预览的图片,可以试一下有页面之后使用组件截图,

针对“HarmonyOS 鸿蒙Next相机预览”的问题,以下是专业且简洁的回答:

HarmonyOS 鸿蒙Next在相机预览功能方面,主要依赖于其自研的图形处理框架和相机服务模块。该框架提供了高效的图像处理能力和灵活的相机接口,使得开发者可以轻松实现相机预览功能。

在鸿蒙Next系统中,相机预览的实现通常涉及以下几个关键步骤:

  1. 相机权限申请:应用需要先获取用户的相机使用权限,才能访问相机硬件。

  2. 相机服务初始化:通过鸿蒙提供的相机服务接口,初始化相机服务,并获取相机实例。

  3. 预览窗口设置:设置相机预览的显示窗口,通常是一个SurfaceView或TextureView。

  4. 启动预览:调用相机实例的预览启动方法,开始从相机获取图像数据,并在预览窗口中显示。

  5. 图像处理与回调:在预览过程中,可以对图像数据进行处理,如滤镜、裁剪等,并通过回调接口获取处理后的图像数据。

需要注意的是,鸿蒙Next系统的相机预览功能可能会随着系统版本的更新而有所变化。开发者在实现该功能时,应参考最新的鸿蒙开发文档和API接口。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部