HarmonyOS 双路预览的component.byteBuffer创建PixelMap失败

代码如下:

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) {
        // do something...
        // 创建ImageSource实例
        const imageSource: image.ImageSource = image.createImageSource(imgComponent.byteBuffer);
        const decodingOptions: image.DecodingOptions = {
          editable: true, // 是否可编辑。当取值为false时,图片不可二次编辑,如crop等操作将失败。
          desiredPixelFormat: 3, // 解码的像素格式。3表示RGBA_8888。
        }

        // 创建pixelMap
        let originalPixelMap:image.PixelMap = await imageSource.createPixelMap(decodingOptions); // 这里会报错 Create PixelMap error
      } else {
        console.error('byteBuffer is null');
      }
      nextImage.release();
    })
  })
})
HarmonyOS
2024-12-25 15:06:38
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
fox280

请参考示例:

try {
  this.mReceiver = image.createImageReceiver({width: this.previewProfileObj.size.width, height: this.previewProfileObj.size.height},
    image.ImageFormat.JPEG, 8);
  // 接受图像帧
  this.mReceiver.on('imageArrival', (): void => {
    this.mReceiver.readNextImage((errCode: BusinessError, imageObj: image.Image): void => {
      console.info('readNextImage start');
      if (errCode || imageObj === undefined) {
        console.error('readNextImage failed');
        return;
      }
      imageObj.getComponent(image.ComponentType.JPEG, (errCode: BusinessError, component: image.Component): void => {
        console.info(`err: ${JSON.stringify(errCode)}`);
        if (errCode || component === undefined) {
          console.info('getComponent failed');
          return;
        }
        let buffer: ArrayBuffer;
        if (component.byteBuffer as ArrayBuffer) {
          buffer = component.byteBuffer;
          let imageSource = image.createImageSource(buffer, sourceOptions);
          let p = imageSource.createPixelMapSync(decodingOptions);
          this.savePictureJpg(buffer, GlobalContext.getContext().cacheDir + "/test.jpg");
        } else {
          console.error('component byteBuffer is undefined');
        }
      });
    });
  });
} catch (error) {
  let err = error as BusinessError;
  console.error(`savePicture err: ${JSON.stringify(err)}`);
}

let decodingOptions : image.DecodingOptions = {
  editable: true,
  desiredPixelFormat: 3,
}

let sourceOptions: image.SourceOptions = {
  sourceDensity: 120,
  sourcePixelFormat: 8,
  sourceSize: {
    height: 1080,
    width: 1920
  }
}

createImageSource和createPixelMapSync参数,savePictureJpg可以不用关注。

分享
微博
QQ
微信
回复
2024-12-25 17:49:53
相关问题
如何实现预览+录制功能
1369浏览 • 1回复 待解决
HarmonyOS 创建相机预览失败
729浏览 • 1回复 待解决
WebView支持4G & WIFI能力吗?
1026浏览 • 1回复 待解决
HarmonyOS如何将Component转换PixelMap
682浏览 • 1回复 待解决
HarmonyOS filePreview预览txt提示预览失败
1055浏览 • 1回复 待解决
HarmonyOS 文件预览失败
143浏览 • 1回复 待解决