根据Buffer生成的PixelMap,显示颜色错误

一个ArrayBuffer,内部为RGBA_8888格式的颜色数据。将这个ArrayBuffer转成PixelMap, 最后存成文件。打开这个文件,发现显示颜色错误。怀疑是把RGBA_8888数据当成BGRA_8888处理了,修改pixelFormat参数无效。

以下是出问题的示例代码:

let frameCb = (color: ArrayBuffer, index: number): boolean => { 
  hilog.error(0, "marvel", "generateVideoFrame pts: %{public}d",index); 
  let opts: image.InitializationOptions = { editable: true, pixelFormat: 3, size: { height: param.imgHeight, width: param.imgWidth } } 
  image.createPixelMap(color, opts).then((pixelMap: image.PixelMap) => { 
    console.info('Succeeded in creating pixelmap.'); 
    let packOpts : image.PackingOption = { format:"image/png", quality:98 }; 
    const imagePackerApi = image.createImagePacker(); 
    const context : Context = getContext(this); 
    const path : string = context.cacheDir + "/pixel_map.jpg"; 
    let file = fs.openSync(path, fs.OpenMode.CREATE | fs.OpenMode.READ_WRITE); 
    imagePackerApi.packToFile(pixelMap, file.fd, packOpts).then(() => { 
      console.info('Succeeded image/jpeg.'); 
    }).catch((error : BusinessError) => { 
      console.error('Failed to pack the image. And the error is: ' + error); 
    }) 
 
  }).catch((error: BusinessError) => { 
    console.error('Failed to create pixelmap.'); 
  }) 
  return false; 
};
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
HarmonyOS
2024-09-10 11:06:09
1139浏览
收藏 0
回答 1
回答 1
按赞同
/
按时间
zxjiu

以流创建pixelmap,该接口只能接受bgra格式,按照bgra去读取流做处理。接口参数设置的foramt是出参,如果入参流的排列不是bgra,无论怎么设,都会导致颜色错误。 可将入参流调整为bgra格式。

分享
微博
QQ
微信
回复
2024-09-10 16:03:01


相关问题
验证pixelmap数据buffer转base64是否正常
2695浏览 • 1回复 待解决
可以以颜色创建pixelmap
889浏览 • 1回复 待解决
HarmonyOS 怎么改pixelmap颜色
587浏览 • 1回复 待解决
HarmonyOS 根据视频路径生成缩略图
645浏览 • 1回复 待解决
List组件divider颜色显示透List组件颜色
782浏览 • 0回复 待解决
文字背景颜色渐变显示
2851浏览 • 1回复 待解决
如何生成一个十六进制颜色色值?
1127浏览 • 1回复 待解决