HarmonyOS 鸿蒙Next 拿到一张图片的ArrayBuffer类型的二进制数据串,我需要改变这张图片的角度如何实现
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类型的二进制数据串,并希望改变这张图片的角度,可以采用以下步骤:
-
将ArrayBuffer数据转换为图像:首先,你需要将ArrayBuffer数据解码成图像对象。HarmonyOS提供了相应的API,比如
BitmapFactory
,可以用来从二进制数据创建Bitmap
对象。 -
使用Canvas进行旋转:创建一个
Canvas
对象,并设置其背景为一个空的Bitmap
(大小与原图相同)。然后,使用Canvas.rotate
方法设置旋转角度,并将原图像绘制到这个旋转后的画布上。 -
获取旋转后的图像:旋转完成后,从
Canvas
中获取旋转后的图像Bitmap
。 -
处理后续操作:你可以将这个旋转后的
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