在鸿蒙系统中,如何实现相机的预览功能?

我正在开发一个相机应用,需要在屏幕上实时显示相机预览画面。请问在鸿蒙系统中,如何实现这一功能?需要用到哪些API,具体步骤是怎样的?
最好能提供一个简单的示例代码来展示如何实现相机预览。

本文参与了 【 HarmonyOS NEXT 技术问答冲榜,等你来战!】欢迎正在阅读的你也加入。

阅读 75
1 个回答

在鸿蒙系统中,您可以通过创建PreviewOutput对象并将其添加到会话中来实现相机预览功能。
比如是一个示例代码:

import { camera } from '@kit.CameraKit';
import { common } from '@kit.AbilityKit';

async function startCameraPreview(context: common.BaseContext, surfaceId: string): Promise<void> {
    const cameraManager = camera.getCameraManager(context);
    if (!cameraManager) {
        console.error('Camera manager is not available');
        return;
    }

    const cameraDevice = await selectCamera(context); // 假设这个函数实现了相机选择
    if (!cameraDevice) {
        console.error('No camera selected');
        return;
    }

    const cameraInput = cameraManager.createCameraInput(cameraDevice);
    if (!cameraInput) {
        console.error('Failed to create camera input');
        return;
    }

    const previewOutput = cameraManager.createPreviewOutput({
        format: camera.CameraFormat.YUV_420_SP,
        width: 1280,
        height: 720,
        frameRateRange: { min: 15, max: 30 }
    }, surfaceId);

    const session = cameraManager.createSession(camera.SceneMode.NORMAL_VIDEO);
    session.addInput(cameraInput);
    session.addOutput(previewOutput);

    try {
        await session.start();
        console.log('Camera preview started');
    } catch (error) {
        console.error('Failed to start camera preview:', error);
    }
}

本文参与了 【 HarmonyOS NEXT 技术问答冲榜,等你来战!】欢迎正在阅读的你也加入。

logo
HarmonyOS
子站问答
访问
宣传栏