`readPixelsToBuffer`/`writeBufferToPixels` 实现 RGBA buffer 级像素处理;
旋转用 `pm.rotate(degrees)`,翻转可用变换矩阵;
像素级处理须放在异步任务中,避免阻塞 UI 线程。
通过 `photoAccessHelper` 选取图片并解码,实现图片解码与 PixelMap 获取;;
buffer 级像素读写实现滤镜,依次测试灰度化、二值化、亮度调节结果;
验证旋转/镜像结果正确;
验证编码保存的 JPEG 可在图库正常查看,掌握旋转/镜像变换与 JPEG 编码保存。

核心代码

import { image } from '@kit.ImageKit'

// 1) 解码
const source = image.createImageSource(fd)
let pm: image.PixelMap = await source.createPixelmap()

// 2) 灰度化(像素级处理)
const info = await pm.getImageInfo()
const buffer = new ArrayBuffer(info.size.width * info.size.height * 4)
await pm.readPixelsToBuffer(buffer)
const buf = new Uint8Array(buffer)
for (let i = 0; i < buf.length; i += 4) {
  const gray = 0.299 * buf[i] + 0.587 * buf[i + 1] + 0.114 * buf[i + 2]
  buf[i] = buf[i + 1] = buf[i + 2] = gray
}
await pm.writeBufferToPixels(buffer)

// 3) 旋转 / 镜像(便捷接口)
await pm.rotate(90)                     // 旋转 90°

// 4) 编码保存为 JPEG
const packer = image.createImagePacker()
const outFile = fs.openSync(savePath, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE)
await packer.packToFile(pm, outFile.fd, { format: 'image/jpeg', quality: 90 })

 

Logo

讨论HarmonyOS开发技术,专注于API与组件、DevEco Studio、测试、元服务和应用上架分发等。

更多推荐