image.createPixelMap方法与pixelMap.readPixelsToBuffer方法咨询

目前我遇到了这样一种情况:

前提:iconMap是一个PixelMap对象,通过以下代码。

let bufSize = iconMap.getPixelBytesNumber(); 
let iconBuffer: ArrayBuffer = new ArrayBuffer(bufSize); 
await iconMap.readPixelsToBuffer(iconBuffer); 
let sqr = Math.sqrt(bufSize / 4); 
let opts: image.InitializationOptions = { editable: true, pixelFormat: 4, size: { height: sqr, width: sqr } } 
let resultMap = await image.createPixelMap(iconBuffer, opts);

最后将resultMap赋值给Image组件,但是组件显示的图片色值发生了变化,这个是怎么回事,我需要怎么修改才能使图片展示和原图像一样呢?

HarmonyOS
2024-09-10 10:59:07
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
Heiang

以下是验证好的代码

需要将图片前后处理的格式保持一致即可:

async createCanvasPixelMap() { 
 
  let resourceMgr: resourceManager.ResourceManager = (getContext(this) as common.UIAbilityContext).resourceManager; 
  let startIconRawDesc = await resourceMgr.getRawFd('startIcon.png'); 
  let imageSrc: image.ImageSource = image.createImageSource(startIconRawDesc); 
  // let iconMap: image.PixelMap = await imageSrc.createPixelMap(); 
  let iconMap: image.PixelMap = await imageSrc.createPixelMap({desiredPixelFormat:image.PixelMapFormat.BGRA_8888}); 
  this.defaultIcon = iconMap; 
  console.log(`${this.defaultIcon.getPixelBytesNumber()}`) 
  let iconBufSize = iconMap.getPixelBytesNumber(); 
  console.log(`${Math.sqrt(4)}`) 
  let sqr = Math.sqrt(iconBufSize / 4) 
  let opts: image.InitializationOptions = { editable: true, pixelFormat: 4, size: { height: sqr, width: sqr } } 
  let iconBuffer: ArrayBuffer = new ArrayBuffer(iconBufSize); 
  await iconMap.readPixelsToBuffer(iconBuffer) 
  this.icon = await image.createPixelMap(iconBuffer, opts); 
  // this.icon = iconMap; 
  imageSrc.release(); 
} 
}
分享
微博
QQ
微信
回复
2024-09-10 17:37:41
相关问题
HarmonyOS image.createPixelMap使用问题
255浏览 • 1回复 待解决
Native Image模块API-OH_PixelMap_CreatePixelMap
1748浏览 • 1回复 待解决
HarmonyOS Image组件能调用异步方法吗?
291浏览 • 1回复 待解决
HarmonyOS image resizable问题咨询
428浏览 • 1回复 待解决
HarmonyOS Image加载本地图片咨询
471浏览 • 1回复 待解决