当前位置: 首页 > article >正文

[Harmony]颜色初始化

 默认初始化颜色

let color: Color = 0xFF00FF

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


// 颜色工具类
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;
}

http://www.lryc.cn/news/2404659.html

相关文章:

  • 指针与函数参数传递详解 —— 值传递与地址传递的区别及应用
  • 【NLP中向量化方式】序号化,亚编码,词袋法等
  • C++学习-入门到精通【16】自定义模板的介绍
  • 关于脏读,幻读,可重复读的学习
  • 源码级拆解:如何搭建高并发「数字药店+医保购药」一体化平台?
  • 旅行商问题(TSP)的 C++ 动态规划解法教学攻略
  • unix/linux,sudo,其内部结构机制
  • Hadoop 3.x 伪分布式 8088端口无法访问问题处理
  • Redis线程安全深度解析:单线程模型的并发智慧
  • 零基础在实践中学习网络安全-皮卡丘靶场(第十期-Over Permission 模块)
  • 北京大学肖臻老师《区块链技术与应用》公开课:12-BTC-比特币的匿名性
  • [Harmony]网络状态监听
  • 毕设 基于机器视觉的驾驶疲劳检测系统(源码+论文)
  • Ubuntu18.6 学习QT问题记录以及虚拟机安装Ubuntu后的设置
  • Vue3中computed和watch的区别
  • 发版前后的调试对照实践:用 WebDebugX 与多工具构建上线验证闭环
  • 瀚文(HelloWord)智能键盘项目深度剖析:从0到1的全流程解读
  • Shell编程核心符号与格式化操作详解
  • 针对“仅某个地区出现Bug”的原因分析与解决方案
  • 学习STC51单片机30(芯片为STC89C52RCRC)
  • sql中group by使用场景
  • 将HTML内容转换为Canvas图像,主流方法有效防止文本复制
  • Python-进程
  • Paraformer分角色语音识别-中文-通用 FunASR demo测试与训练
  • 【从0-1的CSS】第1篇:CSS简介,选择器以及常用样式
  • 对抗反爬机制的分布式爬虫自适应策略:基于强化学习的攻防博弈建模
  • JDK21深度解密 Day 15:JDK21实战最佳实践总结
  • 手写muduo网络库(一):项目构建和时间戳、日志库
  • 每日算法刷题Day25 6.7:leetcode二分答案3道题,用时1h40min(遇到两道动态规划和贪心时间较长)
  • 14-Oracle 23ai Vector Search 向量索引和混合索引-实操