HarmonyOS 鸿蒙Next camera 获取预览数据

发布于 1周前 作者 wuwangju 最后一次编辑是 5天前 来自 鸿蒙OS

HarmonyOS 鸿蒙Next camera 获取预览数据

创建了预览数据 output
this.mAnalysisImageReceiver = image.createImageReceiver(size.width, size.height, image.ImageFormat.JPEG, 4)
this.mAnalysisImageReceiver.on(‘imageArrival’, async () => {
let latestImage: image.Image | null = null
try {
if (this.mAnalysisImageReceiver) {
latestImage = await this.mAnalysisImageReceiver.readLatestImage()
if (latestImage) {
let data = await latestImage.getComponent(image.ComponentType.JPEG)
await latestImage.release()
this.mCallback?.onImageAnalysis(data)
}
}
} catch (e) {
CameraLog.e(TAG, ‘prepareImageCaptureReader’, e)
} finally {
latestImage?.release()
}
})
let previewSurfaceId: string = await this.mAnalysisImageReceiver.getReceivingSurfaceId()
CameraLog.d(TAG, prepareImageAnalysisReader: size = ${size} id = ${previewSurfaceId})
this.mAnalysisOutput = this.getCameraManager().createPreviewOutput({
format: camera.CameraFormat.CAMERA_FORMAT_JPEG,
size: size
}, previewSurfaceId)

添加进 session 中 if (this.mAnalysisOutput) { captureSession.addOutput(this.mAnalysisOutput) }

问题场景描述:

1.设置image.ImageFormat.JPEG格式,获取到的数据转换 pixelmap 时报错:Create PixelMap error

2.文档上标记的image.createImageReceiver支持格式:图像格式,取值为ImageFormat常量(目前仅支持 ImageFormat:JPEG),请问如何能获取到 NV21 或者 YUV420P 格式的数据?

4 回复

解决措施:

获取预览数据参考相机双路预览官方文档,官方示例代码中的bytebuffer就是YUV文档地址:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/camera-dual-channel-preview-0000001820880033

您好! 我也想获取yuv数据, 不过有下面疑问

上面官网示例中: createImageReceiver 用的是image.ImageFormat.JPEG nextImage.getComponent 第一个参数也是 image.ComponentType.JPEG 如何理解: imgComponent.byteBuffer 是yuv?

这个bytebuffer确实就是yuv数据,存到文件里面用工具打开过,是nv21数据,但是怎么分别取出yuv分量呢?

在HarmonyOS(鸿蒙)中,获取Next Camera的预览数据,你需要通过Camera2 API或CameraX(如果适用)来实现。这通常涉及设置预览的Surface或TextureView,并通过CaptureRequest和CaptureCallback来捕获和处理预览帧。确保你已经在你的应用中申请了相机权限,并正确配置了CameraKitManager或CameraKitCaptureSession。

检查你的Camera预览设置,确保预览的分辨率、格式等参数与你的需求相匹配。如果问题依旧没法解决请加我微信,我的微信是itying888。

回到顶部