HarmonyOS 鸿蒙Next 如何将 PixelMap 转化成 ArrayBuffer?

发布于 1周前 作者 caililin 最后一次编辑是 5天前 来自 鸿蒙OS

HarmonyOS 鸿蒙Next 如何将 PixelMap 转化成 ArrayBuffer?

如何将 PixelMap 转化成 ArrayBuffer ?

2 回复

PixelMap转换成base64必须先使用imagePacker将pixelMap压缩后再进行base64,若要实现无损压缩,将PixelMap压缩成PNG,即调用imagePacker时,let packOpts: image.PackingOption = { format: ‘image/png’, quality: 100 }; 实现PixelMap转base64可以参考如下代码:

let resourceManager = getContext(this).resourceManager

let imageArray = await resourceManager.getMediaContent($r('app.media.beer'));

let pixelBuffer = new Uint8Array(imageArray).buffer as Object as ArrayBuffer

let imageResource = image.createImageSource(pixelBuffer);

let opts: image.DecodingOptions = { editable: true }

let pixelMap = await imageResource.createPixelMap(opts);

// 转换成base64

const imagePackerApi: image.ImagePacker = image.createImagePacker();

let packOpts: image.PackingOption = { format: 'image/jpeg', quality: 100 };

imagePackerApi.packing(pixelMap, packOpts).then((data: ArrayBuffer) => {

  let buf: buffer.Buffer = buffer.from(data);

  this.base64 = 'data:image/jpeg;base64,' + buf.toString('base64', 0, buf.length);

  console.info('base64: ' + this.base64);

})

base64转ArrayBuffer,使用@ohos.util (util工具函数)模块的Base64Helper进行base64解码,获取Uint8Array对象,然后获取ArrayBuffer。

https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-util-V5#decodesync9

let that = new util.Base64Helper();

let buff = 'TWFuaXNkaXN0aW5ndWlzaGVkbm90b25seWJ5aGlzcmVhc29uYnV0Ynl0aGlzc2luZ3VsYXJwYXNz\r\naW9uZnJvbW90aGVyYW5pbWFsc3doaWNoaXNhbHVzdG9mdGhlbWluZGV4Y2VlZHN0aGVzaG9ydHZl\r\naGVtZW5jZW9mYW55Y2FybmFscGxlYXN1cmU=\r\n';

let result:Uint8Array = that.decodeSync(buff, util.Type.MIME);

let buf:ArrayBuffer = result.buffer as ArrayBuffer

更多关于HarmonyOS 鸿蒙Next 如何将 PixelMap 转化成 ArrayBuffer?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中,将PixelMap转化成ArrayBuffer可以通过以下步骤实现:

  1. 获取PixelMap数据:首先,你需要有一个PixelMap对象,这个对象包含了图像数据。

  2. 创建ByteBuffer:根据PixelMap的宽、高以及像素格式(如ARGB_8888),计算所需字节大小,并创建一个相应大小的ByteBuffer。

  3. 像素数据拷贝:使用PixelMap的readPixels方法,将图像数据从PixelMap拷贝到先前创建的ByteBuffer中。readPixels方法需要指定目标Buffer、起始位置、图像数据的宽、高以及像素格式。

  4. 转换为ArrayBuffer:HarmonyOS提供了将ByteBuffer转换为ArrayBuffer的API,可以直接调用该API完成转换。

示例代码如下(伪代码,实际API可能有所不同):

PixelMap pixelMap = ...; // 已有的PixelMap对象
ByteBuffer byteBuffer = ByteBuffer.allocateDirect(pixelMap.getWidth() * pixelMap.getHeight() * 4); // 假设为ARGB_8888格式
pixelMap.readPixels(byteBuffer, 0, pixelMap.getWidth(), pixelMap.getHeight(), PixelFormat.ARGB_8888);
ArrayBuffer arrayBuffer = ArrayBufferFactory.createFromByteBuffer(byteBuffer);

请注意,上述代码为伪代码,实际开发中需根据具体API文档调整。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部