HarmonyOS 鸿蒙Next 拿到一张图片的ArrayBuffer类型的二进制数据串,我需要改变这张图片的角度如何实现

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

HarmonyOS 鸿蒙Next 拿到一张图片的ArrayBuffer类型的二进制数据串,我需要改变这张图片的角度如何实现

拿到一张图片的ArrayBuffer类型的二进制数据串,我需要改变这张图片的角度,在存入沙箱中,另一个地方取出来展示时就是改变角度后的图片展示效果

2 回复

可以把ArrayBuffer转换成PixelMap,在进行图像变换操作,参考文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/image-arkts-dev-V5

//获取resourceManager资源管理
    const resourceManager = this.context.resourceManager
    //获取图片数据
    const fileData = await resourceManager.getMediaContent($r('app.media.startIcon'))
    //创建imageSource
    const imageSource = image.createImageSource(fileData.buffer)
    let decodingOptions : image.DecodingOptions = {
      editable: true,
      desiredPixelFormat: 3,
    }
    //创建PixelMap
    const pixelMap = await imageSource.createPixelMap(decodingOptions)
    // 顺时针旋转10°
    pixelMap.rotate(10);
    console.log('pixelMap ' + JSON.stringify(pixelMap.getPixelBytesNumber()))
    // 创建ImagePacker实例
    const imagePackerApi = image.createImagePacker();
    // 设置打包参数
    // format:图片打包格式,只支持 jpg 和 webp
    // quality:JPEG 编码输出图片质量
    // bufferSize:图片大小,默认 10M
    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系统中,若你拥有图片的ArrayBuffer类型的二进制数据串,并希望改变这张图片的角度,可以采用以下步骤:

  1. 将ArrayBuffer数据转换为图像:首先,你需要将ArrayBuffer数据解码成图像对象。HarmonyOS提供了相应的API,比如BitmapFactory,可以用来从二进制数据创建Bitmap对象。

  2. 使用Canvas进行旋转:创建一个Canvas对象,并设置其背景为一个空的Bitmap(大小与原图相同)。然后,使用Canvas.rotate方法设置旋转角度,并将原图像绘制到这个旋转后的画布上。

  3. 获取旋转后的图像:旋转完成后,从Canvas中获取旋转后的图像Bitmap

  4. 处理后续操作:你可以将这个旋转后的Bitmap保存到文件、显示在界面上,或者进行其他处理。

示例代码(伪代码):

Bitmap originalBitmap = BitmapFactory.decodeByteArray(arrayBuffer, 0, arrayBuffer.length);
Bitmap rotatedBitmap = Bitmap.createBitmap(originalBitmap.getWidth(), originalBitmap.getHeight(), originalBitmap.getConfig());
Canvas canvas = new Canvas(rotatedBitmap);
canvas.rotate(angle, originalBitmap.getWidth() / 2, originalBitmap.getHeight() / 2);
canvas.drawBitmap(originalBitmap, 0, 0, null);

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

回到顶部