NexusForce 1.0.0
A Modern C++ Library with extended functionality, web components, and utility libraries
载入中...
搜索中...
未找到
颜色

RGB颜色模型的实现 更多...

class  color
 RGB颜色类 更多...

函数

constexpr color operator* (const double scalar, const color &color) noexcept
 标量乘以颜色
constexpr color operator* (const int scalar, const color &color) noexcept
 整数标量乘以颜色

详细描述

RGB颜色模型的实现

遵循的国际标准

本实现严格遵循以下颜色表示与合成相关标准规范:

CSS 颜色标准:

合成与混合标准:

色彩空间标准:

ANSI 终端颜色标准:

XTerm 256 色规范:

图形文件格式标准:

颜色分量定义

根据 CSS Color Module Level 4 §4.2,RGB 颜色由以下分量组成:

分量 范围 数据类型 说明
R (红) 0-255 int 红色通道强度
G (绿) 0-255 int 绿色通道强度
B (蓝) 0-255 int 蓝色通道强度
A (透) 0-255 int Alpha 通道(0=全透明,255=不透明)

十六进制表示

根据 CSS Color Module Level 4 §5.2,支持以下十六进制格式:

格式 示例 说明
#RRGGBB #FF0000 不透明红色(Alpha=255)
#RRGGBBAA #FF000080 半透明红色(Alpha=128)

Alpha 合成规则

根据 W3C Compositing and Blending Level 1 §4,Alpha 合成遵循以下规则:

操作 公式
合成 Alpha α_result = α_src + α_dst × (1 - α_src)
合成 RGB C_result = (C_src × α_src + C_dst × α_dst × (1 - α_src)) / α_result

本实现的 blend() 方法遵循上述规范,在直通 Alpha (straight alpha) 空间进行合成。

灰度转换

根据 ITU-R BT.709-6 和 sRGB 标准,人眼感知灰度采用以下加权平均:

通道 权重 说明
红色 0.299 人眼对红色敏感度
绿色 0.587 人眼对绿色最敏感
蓝色 0.114 人眼对蓝色最不敏感

ANSI 256 色调色板

根据 XTerm 256-Color 规范,调色板结构如下:

索引范围 数量 说明
0-15 16 系统标准色(0-7 标准,8-15 高亮)
16-231 216 6×6×6 RGB 立方体(R,G,B ∈ {0,95,135,175,215,255})
232-255 24 灰度渐变(从 #080808 到 #EEEEEE)

6×6×6 颜色立方体的索引公式:index = 16 + 36×R_idx + 6×G_idx + B_idx

基本 ANSI 8/16 色

根据 ECMA-48 §8.3.117,基本 ANSI 颜色代码:

颜色 前景码 背景码 RGB 近似
黑色 30 40 #000000
红色 31 41 #CD0000
绿色 32 42 #00CD00
黄色 33 43 #CDCD00
蓝色 34 44 #0000EE
品红 35 45 #CD00CD
青色 36 46 #00CDCD
白色 37 47 #E5E5E5

实现细节

特性 规范参数
分量范围 0-255(8 位每通道)
Alpha 类型 直通 Alpha(non-premultiplied)
混合模式 Normal(source-over)
插值空间 直通 Alpha 空间
灰度权重 BT.709 / sRGB(0.299, 0.587, 0.114)
预乘转换 支持(to_premultiplied / from_premultiplied)

预定义颜色常量

本类提供以下预定义颜色常量:

常量名 RGB 值 说明
black() 0, 0, 0, 255 黑色
white() 255, 255, 255, 255 白色
gray() 128, 128, 128, 255 灰色
red() 255, 0, 0, 255 红色
green() 0, 255, 0, 255 绿色
blue() 0, 0, 255, 255 蓝色
yellow() 255, 255, 0, 255 黄色
magenta() 255, 0, 255, 255 品红
cyan() 0, 255, 255, 255 青色
transparent() 0, 0, 0, 0 完全透明
注解
本类采用直通 Alpha(straight alpha)表示,符合 CSS 和 SVG 标准。 对于需要预乘 Alpha 的图形 API(如 OpenGL、DirectX、Metal), 可使用 to_premultiplied() 方法进行转换。
警告
根据 W3C Compositing Level 1,混合操作应在直通 Alpha 空间进行, 在预乘 Alpha 空间直接混合会产生错误的合成结果。 在跨进程或跨 API 传输预乘颜色数据时务必注明格式。
参见
https://www.w3.org/TR/css-color-4/
https://www.w3.org/TR/compositing-1/

函数说明

◆ operator*() [1/2]

color operator* ( const double scalar,
const color & color )
constexprnoexcept

标量乘以颜色

参数
scalar标量
color颜色
返回
缩放后的颜色

在文件 color.hpp838 行定义.

◆ operator*() [2/2]

color operator* ( const int scalar,
const color & color )
constexprnoexcept

整数标量乘以颜色

参数
scalar整数标量
color颜色
返回
缩放后的颜色

在文件 color.hpp846 行定义.