NearestIndexedColor 方法
在物理调色板槽位 8..63 中查找最接近的条目,并返回其公共 ColorIndex 值和物理槽位
该方法在 IXLSWorkbook 和 TXLSXWorkbook 上均可用,并且不会修改调色板或工作簿状态
语法
function NearestIndexedColor( AArgb: LongWord; out AMatch: TXLSNearestIndexedColorMatch): Boolean;
输入
AArgb 接受 24 位 $00RRGGBB 值或不透明的 $FFRRGGBB 值
Alpha 字节为零会被规范化为 $FF;半透明的值会被拒绝,因为索引的工作簿调色板条目是不透明的
结果
| 字段 | 含义 |
|---|---|
InputARGB | 规范化后的不透明输入颜色 |
ColorIndex | 1 到 56 之间的公共调色板索引 |
PaletteSlot | 8 到 63 之间的物理 BIFF 或 OOXML 调色板槽位 |
ARGB | 存储在所选调色板槽位上的规范化不透明颜色 |
DistanceSquared | OKLab 颜色空间中的欧氏距离平方 |
ExactMatch | 当选定条目与规范化输入具有相同 RGB 通道时为 True |
输入为半透明或调色板缓存不可用时,函数返回 false;失败时 ColorIndex 初始化为零,PaletteSlot 初始化为 -1
匹配约定
每个工作簿都会缓存其 56 个物理调色板条目的规范化 ARGB 和 OKLab 坐标
调色板重置会重建完整缓存,有效的单槽位更改只更新对应的缓存槽位
每次查询只转换一次输入,并执行一次固定的 56 条目扫描,没有查询历史,缓存也不会无限制增长
距离相等时选择最低的公共索引(包括重复的调色板颜色),因此结果在各引擎和各次运行之间保持确定性
自动、系统和无效颜色标记不是候选;请使用 ResolveIndexedColor 对这些值进行分类
示例
if Workbook.NearestIndexedColor($FF13579B, Match) then
begin
PaletteIndex := Match.ColorIndex;
if Match.ExactMatch then
UseExactPaletteColor(Match.ARGB);
end;