HarmonyOS 鸿蒙Next中如何获取Resource的PixelMap

HarmonyOS 鸿蒙Next中如何获取Resource的PixelMap 如何获取Resource的PixelMap

4 回复

方式一:通过 DrawableDescriptor 获取(推荐)

适用于通过资源 ID(如 $r('app.media.icon'))获取对应的 PixelMap

步骤:

  1. 通过资源管理器 resourceManager 获取 DrawableDescriptor 对象。
  2. 调用 DrawableDescriptorgetPixelMap() 方法获取 PixelMap

示例代码:

import { DrawableDescriptor } from '@kit.ArkUI';
import { image } from '@kit.ImageKit';

// 获取 resourceManager
let resManager = this.getUIContext().getHostContext()?.resourceManager;

// 通过资源ID获取 DrawableDescriptor
let drawableDesc: DrawableDescriptor = resManager?.getDrawableDescriptor($r('app.media.icon').id) as DrawableDescriptor;

// 获取 PixelMap
let pixelMap: image.PixelMap | undefined = drawableDesc?.getPixelMap();

方式二:通过 resourceManager.getMediaContent 获取原始数据后解码

适用于需要更灵活控制解码过程(如指定解码参数)的场景。

步骤:

  1. 使用 resourceManager.getMediaContent 获取资源的 ArrayBuffer
  2. 通过 image.createImageSource 创建 ImageSource
  3. 调用 ImageSource.createPixelMap 解码得到 PixelMap

示例代码:

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

async function getPixelMapFromResource(context: Context) {
  // 1. 获取 resourceManager
  const resourceMgr = context.resourceManager;
  // 2. 获取媒体内容的 ArrayBuffer
  const fileData = await resourceMgr.getMediaContent($r('app.media.icon').id);
  const buffer = fileData.buffer;
  // 3. 创建 ImageSource 并解码为 PixelMap
  const imageSource = image.createImageSource(buffer);
  const pixelMap = await imageSource.createPixelMap();
  return pixelMap;
}

总结

方法 优点 适用场景
DrawableDescriptor.getPixelMap() 接口简洁,一步到位 快速获取资源对应的像素图
resourceManager.getMediaContent + ImageSource 可配置解码参数,更灵活 需要对解码过程进行精细控制(如格式、尺寸等)

注意: 请确保传入的资源 ID 有效且在项目中存在,否则可能导致获取失败。

更多关于HarmonyOS 鸿蒙Next中如何获取Resource的PixelMap的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


let resMgr = getContext(this).resourceManager;
let fd = resMgr.getRawFdSync('xxx.png');
let imageSource = image.createImageSource(fd);
let pixelMap = imageSource.createPixelMapSync();

在rawfile资源目录下。图片名字不能出错,要不然崩溃。

在HarmonyOS Next中,通过ResourceManager获取Resource对象后,调用getPixelMap(resId)方法可直接获取对应资源ID的PixelMap对象。PixelMap用于处理图像数据,支持解码和操作像素信息。

在HarmonyOS Next中,可以通过ResourceManager获取PixelMap对象。具体步骤如下:

  1. 获取ResourceManager实例:

    const resourceMgr = getContext().resourceManager;
    
  2. 使用getPixelMap方法加载资源:

    let pixelMap = await resourceMgr.getPixelMap($r('app.media.icon').id);
    

注意:资源需在resources/base/media/目录下预置,并通过$r引用资源ID。

回到顶部