鸿蒙 @ohos.arkui.drawableDescriptor (DrawableDescriptor)

鸿蒙 @ohos.arkui.drawableDescriptor (DrawableDescriptor)

在鸿蒙开发中,@ohos.arkui.drawableDescriptor 模块提供了一种强大的方式来处理图片资源,包括普通图片和分层图片(LayeredDrawableDescriptor)。通过这个模块,开发者可以获取图片的 PixelMap,并对其进行裁剪、融合等操作。


一、模块功能概述

@ohos.arkui.drawableDescriptor 模块提供了以下功能:

  • 获取 PixelMap :支持从普通图片或分层图片中获取 PixelMap。
  • 分层图片处理:支持从 JSON 文件中加载分层图片,包括前景、背景和蒙版。
  • 裁剪路径:提供系统内置的裁剪路径参数,用于图片裁剪。

二、使用 DrawableDescriptor

(一)导入模块

在鸿蒙 Next 中,可以通过以下方式导入 @ohos.arkui.drawableDescriptor 模块:

typescript 复制代码
import { DrawableDescriptor, LayeredDrawableDescriptor } from '@ohos.arkui.drawableDescriptor';

(二)创建 DrawableDescriptor 对象

通过 getDrawableDescriptor 或 getDrawableDescriptorByName 方法创建 DrawableDescriptor 或 LayeredDrawableDescriptor 对象。

示例代码
typescript 复制代码
@Entry
@Component
struct Index {
  private resManager = getContext().resourceManager;

  build() {
    Row() {
      Column() {
        Image((this.resManager.getDrawableDescriptor($r('app.media.icon').id) as LayeredDrawableDescriptor))
        Image(((this.resManager.getDrawableDescriptor($r('app.media.icon').id) as LayeredDrawableDescriptor).getForeground()).getPixelMap())
      }.height('50%')
    }.width('50%')
  }
}

三、获取 PixelMap

通过 getPixelMap 方法获取图片的 PixelMap。

示例代码
typescript 复制代码
let resManager = getContext().resourceManager;
let pixmap: DrawableDescriptor = (resManager.getDrawableDescriptor($r('app.media.icon').id)) as DrawableDescriptor;
let pixmapNew: object = pixmap.getPixelMap();

四、分层图片处理

分层图片需要通过 JSON 文件定义,包含前景、背景和蒙版。

drawable.json 示例
json 复制代码
{
  "layered-image": {
    "background": "$media:background",
    "foreground": "$media:foreground"
  }
}
获取分层图片的 PixelMap
typescript 复制代码
let resManager = getContext().resourceManager;
let pixmap: LayeredDrawableDescriptor = (resManager.getDrawableDescriptor($r('app.media.icon').id)) as LayeredDrawableDescriptor;
let pixmapNew: object = pixmap.getPixelMap();

五、裁剪路径

通过 getMaskClipPath 方法获取系统内置的裁剪路径参数。

示例代码
typescript 复制代码
@Entry
@Component
struct Index {
  build() {
    Row() {
      Column() {
        Image($r('app.media.icon'))
          .width('200px').height('200px')
          .clip(new Path({ commands: LayeredDrawableDescriptor.getMaskClipPath() }))
        Text(`获取系统内置的裁剪路径参数:`)
          .fontWeight(800)
        Text(JSON.stringify(LayeredDrawableDescriptor.getMaskClipPath()))
          .padding({ left: 20, right: 20 })
      }.height('100%').justifyContent(FlexAlign.Center)
    }.width('100%')
  }
}

六、总结

@ohos.arkui.drawableDescriptor 模块为鸿蒙开发提供了强大的图片处理功能,支持普通图片和分层图片的处理。通过 getDrawableDescriptor 方法获取图片资源,并通过 getPixelMap 方法获取 PixelMap。分层图片可以通过 JSON 文件定义,并支持前景、背景和蒙版的处理。此外,模块还提供了系统内置的裁剪路径参数,用于图片裁剪。

希望本文能帮助你更好地理解和使用 @ohos.arkui.drawableDescriptor 模块。如果有任何问题或需要进一步讨论,欢迎随时交流!

相关推荐
resh_people13 小时前
开源鸿蒙平台 KMP_CMP 三方库「Kermit」适配全流程
华为·开源·harmonyos
李游Leo15 小时前
HarmonyOS 7 EasyGo + ArkUI Navigation:平行视界主副页筛选事务与跨栏撤销一致性【鸿蒙心迹】
华为·harmonyos
HwJack2016 小时前
【共创稿事节】HarmonyOS 7空间应用的可用性测试和体验评估小方法分享
华为·harmonyos·可用性测试
m0_7381858216 小时前
Flutter 鸿蒙化实战:flutter_scankit 适配 OpenHarmony,华为 ScanKit 扫码
flutter·华为·harmonyos·鸿蒙
zhangfeng113316 小时前
Ag / Cu / Au / Ru / Ir / Rh银 铜 金 钌铱 铑 纳米尺度下的 导电性 + 扩散/迁移缺点
人工智能·华为·ai编程·npu
用户1179104883318 小时前
别让AI随便启动你的LSP:hmharness给语言服务器加SHA256门禁 GitHub:swsgbl/hmharness
ai编程·harmonyos
李游Leo21 小时前
HarmonyOS 7 + Share Kit-Window Kit:精准碰一碰屏幕坐标的窗口换算与落点拒绝【鸿蒙心迹】
华为·harmonyos
翼辉cto21 小时前
Compose Multiplatform KV 存储库 multiplatform-settings 的 OpenHarmony 鸿蒙化适配实战
华为·harmonyos
事圆则缓1 天前
Flutter 开发鸿蒙实战:从 OpenHarmony 适配版到 HAP 构建与插件接入
flutter·华为·harmonyos
传奇开心果编程1 天前
【ArkUI进阶练中学】第9课:分布式能力与多设备协同
学习·ui·华为·harmonyos