[Harmony]颜色初始化

默认初始化颜色

TypeScript 复制代码
let color: Color = 0xFF00FF

创建一个工具,用十六进制颜色和RGBA初始化颜色

TypeScript 复制代码
// 颜色工具类
export class ColorUtils {
  /**
   * 十六进制颜色初始化(支持透明度)
   * @param hex 支持格式:#RRGGBB、#AARRGGBB、0xRRGGBB、0xAARRGGBB
   * @param alpha 可选透明度(0-1)
   */
  static fromHex(hex: string | number, alpha?: number): Color {
    let hexValue: number;

    if (typeof hex === 'string') {
      // 去除#号
      hex = hex.replace('#', '');

      // 处理3/4位简写格式
      if (hex.length === 3 || hex.length === 4) {
        hex = hex.split('').map(c => c + c).join('');
      }

      // 补全6位或8位
      if (hex.length === 6) {
        hex = 'FF' + hex; // 默认不透明
      }

      hexValue = parseInt(hex, 16);
    } else {
      hexValue = hex;
    }

    // 应用透明度覆盖
    if (alpha !== undefined) {
      const alphaByte = Math.round(alpha * 255);
      hexValue = (alphaByte << 24) | (hexValue & 0x00FFFFFF);
    }

    return hexValue as Color;
  }

  /**
   * RGBA颜色初始化
   * @param r 红色通道(0-255)
   * @param g 绿色通道(0-255)
   * @param b 蓝色通道(0-255)
   * @param a 透明度(0-1)
   */
  static fromRGBA(r: number, g: number, b: number, a: number = 1): Color {
    const alphaByte = Math.round(a * 255);
    return ((alphaByte << 24) | (r << 16) | (g << 8) | b) as Color;
  }


  /**
   * 将Color转换为十六进制字符串
   * @param color 颜色对象
   * @param withAlpha 是否包含透明度通道
   * @returns 格式:#AARRGGBB 或 #RRGGBB
   */
  static toHexString(color: Color, withAlpha: boolean = true): string {
    const num = Number(color);
    if (withAlpha) {
      return `#${((num >>> 0) & 0xFFFFFFFF).toString(16).padStart(8, '0').toUpperCase()}`;
    }
    return `#${((num & 0x00FFFFFF) >>> 0).toString(16).padStart(6, '0').toUpperCase()}`;
  }

  /**
   * 将Color转换为RGBA对象
   * @param color 颜色对象
   * @returns 包含r,g,b,a(0-1)的对象
   */
  static toRGBA(color: Color): RGBAColor {
    const num = Number(color);
    return {
      r: (num >> 16) & 0xFF,
      g: (num >> 8) & 0xFF,
      b: num & 0xFF,
      a: ((num >> 24) & 0xFF) / 255
    };
  }
}

interface RGBAColor {
  r: number;
  g: number;
  b: number;
  a: number;
}
相关推荐
zhanshuo8 小时前
构建可扩展的状态系统:基于 ArkTS 的模块化状态管理设计与实现
harmonyos
zhanshuo8 小时前
ArkTS 模块通信全解析:用事件总线实现页面消息联动
harmonyos
codefish79813 小时前
鸿蒙开发学习之路:从入门到实践的全面指南
harmonyos
yrjw19 小时前
一款基于react-native harmonyOS 封装的【文档】文件预览查看开源库(基于Harmony 原生文件预览服务进行封装)
harmonyos
搜狐技术产品小编20232 天前
搜狐新闻直播间适配HarmonyOs实现点赞动画
华为·harmonyos
zhanshuo2 天前
ArkUI 玩转水平滑动视图:超全实战教程与项目应用解析
harmonyos·arkui
zhanshuo2 天前
ArkUI Canvas 实战:快速绘制柱状图图表组件
harmonyos·arkui
zhanshuo2 天前
手把手教你用 ArkUI 写出高性能分页列表:List + onScroll 实战解析
harmonyos
zhanshuo2 天前
深入解析 ArkUI 触摸事件机制:从点击到滑动的开发全流程
harmonyos
i仙银3 天前
鸿蒙沙箱浏览器 - SandboxFinder
app·harmonyos