图片解码指将所支持格式的存档图片解码成统一的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")
});
- 创建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);
- 设置解码参数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")
});
- 释放pixelMap。
pixelMap.release();