[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;
}
相关推荐
Sirius_Ji6 小时前
# 一份鸿蒙原生支持硬解的 ffmpeg 开发基座
harmonyos
贾伟康7 小时前
HarmonyOS API 26 Navigation路由栈上限:stackSizeLimit、过载保护与容量观测
harmonyos·arkts·navigation·navpathstack·api26
江华森13 小时前
把鸿蒙云手机调试的 5 个坑写成 Skill:12 项检查清单与报错决策树
harmonyos
木木子2214 小时前
用华为云码道构建校园导航应用「新生通」:从需求分析到工程落地
华为·华为云·harmonyos
贾伟康15 小时前
HarmonyOS API 26 Navigation 自适应模式:mode、分栏切换与窗口断点治理
harmonyos·arkts·arkui·navigation·自适应布局
贾伟康15 小时前
【转盘决定吧|07】HarmonyOS ArkTS 6.0.2.130 趣味题库:场景分类、随机选择与详情页解耦
harmonyos·arkts·路由·数据建模·arkui
贾伟康16 小时前
【电路实验模拟|03】HarmonyOS ArkTS 交通灯实战:用定时状态切换红黄绿灯
harmonyos·arkts·canvas·arkui·交通灯
贾伟康1 天前
HarmonyOS API 26 嵌套 Navigation:getParent、父子栈边界与返回分发
harmonyos·arkts·navigation·嵌套路由·navpathstack
行者-全栈开发1 天前
【鸿蒙心迹】多线程并发实战——TaskPool 与 Worker 选型与踩坑(HarmonyOS 7.x)
华为·harmonyos·多线程并发·worker·taskpool·线程通信·harmonyos 并发
OH_TPC2 天前
@ohos/aki 源码解读(一):一行绑定背后,宏、模板与索引分发
harmonyos