HarmonyOS 鸿蒙Next 窗口截图readPixelsToBuffer不正确

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

HarmonyOS 鸿蒙Next 窗口截图readPixelsToBuffer不正确

window.getLastWindow(ScreenUtil.getInstance().context, async (err, data) => {
const pixelMap = await data.snapshot()
await pixelMap.scale(0.2, 0.2)
const imageBuffer: ArrayBuffer = new ArrayBuffer(pixelMap.getPixelBytesNumber());
await pixelMap.readPixelsToBuffer(imageBuffer)
const imageBase64 = TransformUtil.getInstance().uint8ArrayToBase64(new Uint8Array(imageBuffer))
handler.onSuccess(new Object({ “image”: imageBase64 }))
})
以上窗口截屏代码,readPixelsToBuffer后,imageBuffer是未初始化的数据,转的base64是乱码

2 回复
readPixelsToBuffer获取的是pixelMap的像素数据,所以乱码。通过packing打包的buffer数据才是图片的全部数据,参考:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-image-V5#packing

unity8array转base64代码:

pixelToBase64(pixelMap: PixelMap) {
    const imagePackerApi: image.ImagePacker = image.createImagePacker()
    let packOpts: image.PackingOption = { format: 'image/jpeg', quality: 30 }
    try {
      imagePackerApi.packing(pixelMap, packOpts).then((data: ArrayBuffer) => {
        let bufferArr = new Uint8Array(data)
        let help = new util.Base64Helper
        let base = help.encodeToStringSync(bufferArr)
      })
    } catch (err) {
}

}

转base64图片

pixelToBase64(pixelMap: PixelMap) {
const imagePackerApi = image.createImagePacker();
const packOpts: image.PackingOption = { format: “image/jpeg”, quality: 100 };
imagePackerApi.packing(pixelMap, packOpts).then(async (data: ArrayBuffer) => {
let buf: buffer.Buffer = buffer.from(data);
let base64  = ‘data:image/jpeg;base64,’ + buf.toString(‘base64’, 0, buf.length);
console.info('base64: ’ + base64);
})
}

针对您提出的HarmonyOS 鸿蒙Next窗口截图readPixelsToBuffer不正确的问题,这通常可能是由于多种原因导致的。以下是一些可能的解决思路:

  1. 检查截图权限:确保您的应用已正确申请并获得了截图所需的权限。
  2. 确认PixelMap对象有效:在调用readPixelsToBuffer之前,确保PixelMap对象是有效的,并且已经正确获取了屏幕截图。
  3. 验证Buffer大小:确保创建的ArrayBuffer大小与PixelMap的像素字节数相匹配。
  4. 像素格式一致性:在创建PixelMap和读取像素到Buffer时,确保使用的像素格式是一致的。
  5. 错误处理:添加适当的错误处理逻辑,以便在读取像素时捕获并处理可能出现的异常。

如果上述方法仍然无法解决问题,建议检查HarmonyOS的官方文档或更新日志,以确认是否存在已知的问题或相关的API变更。此外,您也可以联系HarmonyOS的开发者社区或论坛寻求帮助。如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部