c# - 在 C# 中将 RGB 颜色转换为最接近的 ACI 颜色

标签 c# colors rgb autocad dxf

我目前正在编写一个与 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/

相关文章:

c# - 在 IIS 7.5 中部署 WCF 服务

c# - 配置对我的 SQL Server 的访问

java - 在 Jlabel 上实现简单的悬停效果

image - Matlab 将图像恢复为原始颜色

c# - 从大型数据集中获取样本集

c# - 文件共享删除 (Az​​ure) 失败,如何修复?

java - 为什么我的 java 动画不工作?

java - 按颜色对列表进行排序 (Java)

在 C__ 中将 PPM 从 RGB 转换为 HSL

javascript - RGB转十六进制和十六进制转RGB