”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 如何在颜色阵列中找到最接近的颜色?

如何在颜色阵列中找到最接近的颜色?

发布于2025-03-23
浏览:651

How to Find the Closest Color in a Color Array?
在数组中确定最接近的颜色

比较颜色并识别数组中最接近的匹配是Graphics应用程序中的常见任务。在本文中,我们将探讨三种不同的方法来实现这一目标:

1。仅在色调的比较:

此方法仅考虑颜色的色调,忽略饱和度和亮度。色相距离是使用简单的减法来计算的,最接近的色调是通过找到最小距离来确定的。

2。 rgb距离:

此方法测量颜色的RGB值之间的直接距离。色差被计算为RGB空间中的欧几里得距离,通过最小化此差异,可以找到最接近的颜色。

以加权方式结合了色相,饱和度和亮度。计算感知的亮度,并根据饱和度和亮度计算颜色数。最接近的颜色是通过最小化色差和色相距离的加权总和来确定的。

实现这是这些方法的实现:[&& && pranly比较 int ClosestColor1(List 颜色,颜色目标) { var hue1 = target.gethue(); var diffs = colors.Select(n => gethuedistance(n.gethue(),hue1)); var diffmin = diffs.min(n => n); 返回diffs.tolist()。findIndex(n => n == diffmin); } // RGB距离比较 Int ClosestColor2(List 颜色,颜色目标) { var colordiffs = colors.Select(n => colordiff(n,target))。min(n => n); 返回colors.findIndex(n => colordiff(n,target)== colordiffs); } //加权色调,饱和度和亮度比较 Int ClosestColor3(List 颜色,颜色目标) { float hue1 = target.gethue(); var num1 = colorrum(target); var diffs = colors.Select(n => Math.abs(colornum(n)-Num1)gethuedistance(n.gethue(),hue1)); var diffmin = diffs.min(x => x); 返回diffs.tolist()。findIndex(n => n == diffmin); } [2 float getbrightness(颜色c)=>(c.r * 0.299f c.g * 0.587f c.b * 0.114f) / 256f; //两种色调之间的距离: float gethuedistance(float hue1,float hue2)=> math.abs(hue1 -hue2)> 180? 360 -MATH.ABS(HUE1 -HUE2):MATH.ABS(hue1 -hue2); //通过饱和和亮度称量: float colornum(颜色c)=> c.getSaturation() *因子at getbrightness(c) * factorbri; // RGB空间中的距离: int colordiff(颜色C1,颜色C2)=>(int)MATH.SQRT(((C1.R -C2.R) *(C1.R -C2.R)(C1.G -C2.G) *(C1.G -C2.G)(C1.B -C2.G)(C1.B -C2.B)度量取决于特定应用。如果色调是主要考虑因素,则只有色调的比较就足够了。对于更通用的颜色匹配,RGB距离或加权色调,饱和度和亮度比较方法可提供更准确的结果。

最新教程 更多>
  • 将PHP数组转换为JavaScript数组的JSON方法
    将PHP数组转换为JavaScript数组的JSON方法
    将php array转换为javaScript 当提供的php和javascript数组无直接相关时,php提供JSON_ENCODE()函数以将数组转换为JSON(JOSH(Javascript Object Object)格式)中的JSON(json)中的Javascript代码。 $ p...
    编程 发布于2025-05-02
  • 用户本地时间格式及时区偏移显示指南
    用户本地时间格式及时区偏移显示指南
    在用户的语言环境格式中显示日期/时间,并使用时间偏移在向最终用户展示日期和时间时,以其localzone and格式显示它们至关重要。这确保了不同地理位置的清晰度和无缝用户体验。以下是使用JavaScript实现此目的的方法。方法:推荐方法是处理客户端的Javascript中的日期/时间格式化和时...
    编程 发布于2025-05-02
  • 在Ubuntu/linux上安装mysql-python时,如何修复\“ mysql_config \”错误?
    在Ubuntu/linux上安装mysql-python时,如何修复\“ mysql_config \”错误?
    mysql-python安装错误:“ mysql_config找不到”“ 由于缺少MySQL开发库而出现此错误。解决此问题,建议在Ubuntu上使用该分发的存储库。使用以下命令安装Python-MysqldB: sudo apt-get安装python-mysqldb sudo pip in...
    编程 发布于2025-05-02
  • 解决Spring Security 4.1及以上版本CORS问题指南
    解决Spring Security 4.1及以上版本CORS问题指南
    弹簧安全性cors filter:故障排除常见问题 在将Spring Security集成到现有项目中时,您可能会遇到与CORS相关的错误,如果像“访问Control-allo-allow-Origin”之类的标头,则无法设置在响应中。为了解决此问题,您可以实现自定义过滤器,例如代码段中的MyFi...
    编程 发布于2025-05-02
  • Java字符串非空且非null的有效检查方法
    Java字符串非空且非null的有效检查方法
    检查字符串是否不是null而不是空的 if(str!= null && str.isementy())二手: if(str!= null && str.length()== 0) option 3:trim()。isement(Isement() trim whitespace whitesp...
    编程 发布于2025-05-02
  • 如何使用替换指令在GO MOD中解析模块路径差异?
    如何使用替换指令在GO MOD中解析模块路径差异?
    在使用GO MOD时,在GO MOD 中克服模块路径差异时,可能会遇到冲突,其中3个Party Package将另一个PAXPANCE带有导入式套件之间的另一个软件包,并在导入式套件之间导入另一个软件包。如回声消息所证明的那样: go.etcd.io/bbolt [&&&&&&&&&&&&&&&&...
    编程 发布于2025-05-02
  • 反射动态实现Go接口用于RPC方法探索
    反射动态实现Go接口用于RPC方法探索
    在GO 使用反射来实现定义RPC式方法的界面。例如,考虑一个接口,例如:键入myService接口{ 登录(用户名,密码字符串)(sessionId int,错误错误) helloworld(sessionid int)(hi String,错误错误) } 替代方案而不是依靠反射...
    编程 发布于2025-05-02
  • 在Go语言中如何简洁定义10的幂常量
    在Go语言中如何简洁定义10的幂常量
    在GO 利用浮点线文字一种简洁的方式是使用浮点文字,该方法是使用floingpoint protals。写作1E3比写作1000更有效。这是一个示例(67个没有空间的字符):的文字用于未构图的整数常数,我们可以将1000用于KB,并用KB将随后的常量乘以KB,如下所示(77个没有空格的字符):,作...
    编程 发布于2025-05-02
  • CSS网格容器中的子网格如何定位孙元素?
    CSS网格容器中的子网格如何定位孙元素?
    网格subgrids:将孙子放置在网格容器中的方法 display:subgrid and grid sashitance [us grid and grid senasonitance drespligification,display:subgrid允许一个网格项目成为subgrid。这种...
    编程 发布于2025-05-02
  • 如何在其容器中为DIV创建平滑的左右CSS动画?
    如何在其容器中为DIV创建平滑的左右CSS动画?
    通用CSS动画,用于左右运动 ,我们将探索创建一个通用的CSS动画,以向左和右移动DIV,从而到达其容器的边缘。该动画可以应用于具有绝对定位的任何div,无论其未知长度如何。问题:使用左直接导致瞬时消失 更加流畅的解决方案:混合转换和左 [并实现平稳的,线性的运动,我们介绍了线性的转换。这...
    编程 发布于2025-05-02
  • 如何将来自三个MySQL表的数据组合到新表中?
    如何将来自三个MySQL表的数据组合到新表中?
    mysql:从三个表和列的新表创建新表 答案:为了实现这一目标,您可以利用一个3-way Join。 选择p。*,d.content作为年龄 来自人为p的人 加入d.person_id = p.id上的d的详细信息 加入T.Id = d.detail_id的分类法 其中t.taxonomy =...
    编程 发布于2025-05-02
  • Go语言中空接口(interface{})的使用场景与注意事项
    Go语言中空接口(interface{})的使用场景与注意事项
    go中的空接口是无方法的接口,代表任何值,在处理未知数据类型时应使用。 1)它们为通用数据处理提供了灵活性,如FMT软件包所示。 2)由于潜在的类型安全性和性能问题的潜在丢失而谨慎使用它们,并使用逗号ok iDiom安全地主张。 在进行Go编程的世界时,您将不可避免地会遇到空的接口的概念,即插入[...
    编程 发布于2025-05-02
  • 如何实时捕获和流媒体以进行聊天机器人命令执行?
    如何实时捕获和流媒体以进行聊天机器人命令执行?
    在开发能够执行命令的chatbots的领域中,实时从命令执行实时捕获Stdout,一个常见的需求是能够检索和显示标准输出(stdout)在cath cath cant cant cant cant cant cant cant cant interfaces in Chate cant inter...
    编程 发布于2025-05-02
  • 如何使用Python的请求和假用户代理绕过网站块?
    如何使用Python的请求和假用户代理绕过网站块?
    如何使用Python的请求模拟浏览器行为,以及伪造的用户代理提供了一个用户 - 代理标头一个有效方法是提供有效的用户式header,以提供有效的用户 - 设置,该标题可以通过browser和Acterner Systems the equestersystermery和操作系统。通过模仿像Chro...
    编程 发布于2025-05-02
  • 如何使用Python理解有效地创建字典?
    如何使用Python理解有效地创建字典?
    在python中,词典综合提供了一种生成新词典的简洁方法。尽管它们与列表综合相似,但存在一些显着差异。与问题所暗示的不同,您无法为钥匙创建字典理解。您必须明确指定键和值。 For example:d = {n: n**2 for n in range(5)}This creates a dicti...
    编程 发布于2025-05-02

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3