HarmonyOS 鸿蒙Next相机实现双路预览后,帧数据怎样转成PixelMap

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

HarmonyOS 鸿蒙Next相机实现双路预览后,帧数据怎样转成PixelMap

目前调用getComponent后得到的image.Component中的ArrayBuffer,将
ArrayBuffer转成PixelMap一直报错"Create PixelMap error",使用的API 11

部分代码如下,具体文件请看附件,使用文件时,请在module.json5中添加相机权限

 “requestPermissions”: [
{
“name” : “ohos.permission.CAMERA”,
“reason”: “$string:descriptionCamera”,
“usedScene”: {
“abilities”: [
“EntryAbility”
],
“when”:“always”
}
}]

部分代码:

  receiver.on(‘imageArrival’, () => {

      receiver.readNextImage((err: BusinessError, nextImage: image.Image) => {

        if (err || nextImage === undefined) {

          console.error(‘readNextImage failed’);

          return;

        }

        nextImage.getComponent(image.ComponentType.JPEG, async (err: BusinessError, imgComponent: image.Component) => {

          if (err || imgComponent === undefined) {

            console.error(‘getComponent failed’);

          }

          if (imgComponent && imgComponent.byteBuffer as ArrayBuffer) {

            let imageArrayBuffer = imgComponent.byteBuffer as ArrayBuffer;

            console.log(“我得到的图片数据:” + JSON.stringify(imageArrayBuffer))

            console.log(“我得到的图片数据:” + imageArrayBuffer.byteLength)

            console.error(“我有数据的”);

            let imageSource: image.ImageSource = image.createImageSource(imageArrayBuffer);

            try {

              let aa: image.DecodingOptions = {

                desiredSize: { width: 1920, height: 1080 }

              }

              await imageSource.createPixelMap(aa)

            } catch (e) {

              console.error(JSON.stringify(e))

            }

          } else {

            console.error(‘byteBuffer is null’);

          }

          nextImage.release();

        })

      })

    })



关于HarmonyOS 鸿蒙Next相机实现双路预览后,帧数据怎样转成PixelMap的问题,您也可以访问:https://www.itying.com/category-93-b0.html 联系官网客服。

7 回复

createImageSource方法需要传递sourceOptions,获取相机预览的原始视频和创建预览流的profile的size要设置一致

this.previewProfilesObj2Com = previewProfiles[0];

。。。。

let sourceOptions : image.SourceOptions = {

sourceDensity: 120,

sourcePixelFormat: 8,

sourceSize: {

height: this.previewProfilesObj2Com.size.height,

width: this.previewProfilesObj2Com.size.width

}

}

let imageResource = image.createImageSource(imageArrayBuffer,sourceOptions);

传递sourceOptions后拍照可以正常双路预览了,但是拍视频第二路预览流拿出来的照片是绿的,有解决方法吗1719306501924.jpg

找HarmonyOS工作还需要会Flutter的哦,有需要Flutter教程的可以学学大地老师的教程,很不错,B站免费学的哦:https://www.bilibili.com/video/BV1S4411E7LY/?p=17

遇到同样的问题, 请问你问题解决了吗?

这个有可能是大小设置得不对的原因

同样的问题,你们解决了吗

使用文件时将txt后缀改为ets
回到顶部