pixelMap复制之后为什么会变黄

由于没有提供复制pixelMap的api所以自定义了一个,但是通过缓存复制之后图片跟原来的图片颜色不同,复制代码如下:

async  copyPixelMap(pm: PixelMap): Promise<PixelMap> { 
  // 获取图片信息 
  const imageInfo: image.ImageInfo = await pm.getImageInfo(); 
  //buffer 
  const buffer: ArrayBuffer = new ArrayBuffer(pm.getPixelBytesNumber()); 
  await pm.readPixelsToBuffer(buffer); 
  const opts: image.InitializationOptions = { 
    editable: true, 
    //换成Argb也还是黄的 
    pixelFormat: image.PixelMapFormat.RGBA_8888, 
    size: { height: imageInfo.size.height, width: imageInfo.size.width } 
  }; 
  return await image.createPixelMap(buffer, opts); 
}
HarmonyOS
2024-09-10 11:11:14
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
FengTianYa

图片解码出来默认是rgba 读到arraybuffer里,这里需要自己手动写一个rgba2bgra的函数。

图片解码出来的pixelmap默认是rgba排列(imgSource.createPixelMap);image.createPixelMap是以输入流创建的pixelmap,该接口只接受bgra格式,所以需要将解码的图片格式改为bgra,才能拷贝得到正确颜色的图片,需要确保复制的原生pixelMap格式是bgra,并且代码里面的。

const opts: image.InitializationOptions = { 
  editable: true,

换成Argb也还是黄的。

pixelFormat: image.PixelMapFormat.RGBA_8888, 
  size: { height: imageInfo.size.height, width: imageInfo.size.width } 
};

中的pixelFormat要改为pixelFormat:image.PixelMapFormat.BGRA_8888。

分享
微博
QQ
微信
回复
2024-09-10 17:56:29
相关问题
升级到next版后,oaid是否
1643浏览 • 1回复 待解决
如何使应用一键灰,你吗?
2339浏览 • 1回复 待解决
什么是OceanBase 复制表场景?
3275浏览 • 1回复 待解决
OceanBase 复制表的原理是什么
4086浏览 • 1回复 待解决
MySQL主从数据复制采用什么方法?
3197浏览 • 1回复 待解决
不能报名公测为什么
6965浏览 • 1回复 待解决
为什么跳转突然无法实现
1896浏览 • 0回复 待解决
为什么有人对鸿蒙不满?
5188浏览 • 2回复 待解决
Left、Top为什么不生效?
644浏览 • 1回复 待解决
为什么去掉动态化能力?
559浏览 • 1回复 待解决