鸿蒙-图片解码

274 阅读1分钟

图片解码指将所支持格式的存档图片解码成统一的PixelMap,以便在应用或系统中进行图片显示或图片处理

1. 全局导入Image模块。

1.  import { image } from '@kit.ImageKit';

2. 获取图片。

  • 方法一:获取沙箱路径
// Stage模型参考如下代码
const context : Context = getContext(this);
const filePath : string = context.cacheDir + '/test.jpg';
  • 方法二:通过沙箱路径获取图片的文件描述符。
import { fileIo } from '@kit.CoreFileKit';
// Stage模型参考如下代码
const context = getContext(this);
const filePath = context.cacheDir + '/test.jpg';
const file : fileIo.File = fileIo.openSync(filePath, fileIo.OpenMode.READ_WRITE);
const fd : number = file?.fd;
  • 方法三:通过资源管理器获取资源文件的ArrayBuffer
// Stage模型
const context : Context = getContext(this);
// 获取resourceManager资源管理器
const resourceMgr : resourceManager.ResourceManager = context.resourceManager;

不同模型获取资源管理器的方式不同,获取资源管理器后,再调用resourceMgr.getRawFileContent()获取资源文件的ArrayBuffer。

resourceMgr.getRawFileContent('test.jpg').then((fileData : Uint8Array) => {
   console.log("Succeeded in getting RawFileContent")
   // 获取图片的ArrayBuffer
   const buffer = fileData.buffer.slice(0);
}).catch((err : BusinessError) => {
   console.error("Failed to get RawFileContent")
});
  • 方法四:通过资源管理器获取资源文件的RawFileDescriptor。
// Stage模型
const context : Context = getContext(this);
// 获取resourceManager资源管理器
const resourceMgr : resourceManager.ResourceManager = context.resourceManager;

获取资源管理器后,再调用resourceMgr.getRawFd()获取资源文件的RawFileDescriptor。

resourceMgr.getRawFd('test.jpg').then((rawFileDescriptor : resourceManager.RawFileDescriptor) => {
    console.log("Succeeded in getting resourceManager")
}).catch((err : BusinessError) => {
    console.error("Failed to get resourceManager")
});
  1. 创建ImageSource实例。
  • 方法一:通过沙箱路径创建ImageSource。
// path为已获得的沙箱路径
const imageSource : image.ImageSource = image.createImageSource(filePath);
  • 方法二:通过文件描述符fd创建ImageSource。
// fd为已获得的文件描述符
const imageSource : image.ImageSource = image.createImageSource(fd);
  • 方法三:通过缓冲区数组创建ImageSource。
const imageSource : image.ImageSource = image.createImageSource(buffer);
  • 方法四:通过资源文件的RawFileDescriptor创建ImageSource。
const imageSource : image.ImageSource = image.createImageSource(rawFileDescriptor);
  1. 设置解码参数DecodingOptions,解码获取pixelMap图片对象。
import { BusinessError } from '@kit.BasicServicesKit';
let decodingOptions : image.DecodingOptions = {
    editable: true,
    desiredPixelFormat: 3,
}
// 创建pixelMap
imageSource.createPixelMap(decodingOptions).then((pixelMap : image.PixelMap) => {
   console.log("Succeeded in creating PixelMap")
}).catch((err : BusinessError) => {
   console.error("Failed to create PixelMap")
});
  1. 释放pixelMap。
pixelMap.release();