HotXLS 文档

NearestIndexedColor 方法

在物理调色板槽位 8..63 中查找最接近的条目,并返回其公共 ColorIndex 值和物理槽位

该方法在 IXLSWorkbook 和 TXLSXWorkbook 上均可用,并且不会修改调色板或工作簿状态

语法

function NearestIndexedColor(
  AArgb: LongWord;
  out AMatch: TXLSNearestIndexedColorMatch): Boolean;

输入

AArgb 接受 24 位 $00RRGGBB 值或不透明的 $FFRRGGBB 值

Alpha 字节为零会被规范化为 $FF;半透明的值会被拒绝,因为索引的工作簿调色板条目是不透明的

结果

字段含义
InputARGB规范化后的不透明输入颜色
ColorIndex1 到 56 之间的公共调色板索引
PaletteSlot8 到 63 之间的物理 BIFF 或 OOXML 调色板槽位
ARGB存储在所选调色板槽位上的规范化不透明颜色
DistanceSquaredOKLab 颜色空间中的欧氏距离平方
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;

另请参阅