HarmonyOS鸿蒙Next中如何获取相机流进行二次开发,reciver无法获取数据

HarmonyOS鸿蒙Next中如何获取相机流进行二次开发,reciver无法获取数据

需求:想获取相机图片数据,进行二次开发,送到C++层用AI对图片处理,再将结果画到图像上。

根据文档,https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/native-camera-preview-imagereceiver

我创建好了reciver,这里需要创建surfaceID

同时,我在渲染测也用

ret = OH_NativeImage_GetSurfaceId(nativeImage_, &nativeImageSurfaceId_);

创建了surfaceID,打印出来,这两个surfaceID不一样。

是不是因为这个才导致我的reciver无法获取数据?

如果是的需要怎么绑定surfaceID呢?


更多关于HarmonyOS鸿蒙Next中如何获取相机流进行二次开发,reciver无法获取数据的实战教程也可以访问 https://www.itying.com/category-93-b0.html

3 回复

您好,为了更快速解决您的问题,并且吸引更多用户一同参与您问题的解答与讨论,建议您补全如下信息:

更多关于HarmonyOS鸿蒙Next中如何获取相机流进行二次开发,reciver无法获取数据的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中,获取相机流进行二次开发需要使用CameraKit API。首先,通过CameraKit初始化相机实例,然后配置相机参数。使用CameraOutputCapability获取相机输出能力,选择适合的流类型。通过CameraOutput创建Receiver对象,设置Receiver的回调以接收帧数据。确保Receiver的配置与相机输出能力匹配,否则无法获取数据。检查权限和相机状态,确保相机已正确打开并运行。

在HarmonyOS Next中获取相机流数据时,ImageReceiverNativeImageSurfaceID确实需要保持一致才能正确获取数据。您遇到的问题很可能是由于这两个SurfaceID不匹配导致的。

正确做法应该是:

  1. 首先通过OH_ImageReceiver_Create()创建ImageReceiver
  2. 使用OH_ImageReceiver_GetSurface()获取Surface对象
  3. Surface对象获取SurfaceIDOH_NativeWindow_GetSurfaceId()
  4. 将这个SurfaceID用于相机配置

关键代码示例:

// 创建ImageReceiver
OH_ImageReceiver* receiver = OH_ImageReceiver_Create(width, height, format);
// 获取Surface
OHNativeWindow* surface = OH_ImageReceiver_GetSurface(receiver);
// 获取SurfaceID
uint64_t surfaceId;
OH_NativeWindow_GetSurfaceId(surface, &surfaceId);
// 将surfaceId用于相机配置

注意不要使用OH_NativeImage_GetSurfaceId()来获取SurfaceID,因为这是针对已经存在的NativeImage对象,而不是用于接收新数据的Surface

回到顶部