我目前正在编写一个与 dxf 文件交互的程序。因此,我需要一个例程来获取 RGB 颜色值并返回 AutoCAD 颜色索引 (ACI) 中最接近的颜色
有没有人有一些代码或示例如何做到这一点?如果它是在 C# 中就好了,但这不是必需的。
提前致谢。
最佳答案
从某个来源(例如 http://www.jtbworld.com/lisp/DisplayColorProperties.htm )获取所有 ACI 颜色的 RGB 值,并创建一个 ACI 颜色数组。要按索引获取 ACI 颜色,只需从该列表中选择颜色即可。
要从 RGB 进行“最接近”匹配向后查找,只需遍历该数组并返回具有最小距离的颜色(例如,通过检查 3 个颜色 channel 的平方距离:如果你的颜色是 r,g ,b 和 aci 颜色是 R,G,B 那么距离是
dist = (r-R)*(r-R) + (g-G)*(g-G) + (b-B)*(b-B);
ACI 数组中具有最小距离的颜色是与 r,g,b 最接近的匹配。
编辑:正如已经指出的那样:RGB 距离作为视觉/感知差异并不好。为了匹配视觉差异,请转换为 HSV/HSL,或者如果您真的雄心勃勃,可以使用更奇特的色彩空间,如 CIE XYZ,其中“距离”非常接近地代表相似性。现在有很好的颜色空间转换库,例如 Colorful https://www.nuget.org/packages/Colourful/
关于c# - 在 C# 中将 RGB 颜色转换为最接近的 ACI 颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7309506/