Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/137.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 从std::map中选择最近的RGB颜色_C++_Stl_Colors_Rgb - Fatal编程技术网

C++ 从std::map中选择最近的RGB颜色

C++ 从std::map中选择最近的RGB颜色,c++,stl,colors,rgb,C++,Stl,Colors,Rgb,我有一个预定义颜色的地图和一个给定的颜色来选择一个最近的匹配。如果我将使用距离公式,我是否会计算地图中每个预定义颜色的距离,而不仅仅是在匹配限制之间查找一个键?是的,您需要迭代地图中的每个颜色并计算距离。另外,颜色是3D的,而std::map是1D的,如果你有很多颜色,你可能需要3D而不是1D的地图来快速查找。虽然只需重复使用一些颜色不会很贵。颜色比3D复杂一点。你必须考虑亮度以及颜色可能是红色、绿色或蓝色。那么1,0,0比0,1,0更接近255,0,0吗?所以也许颜色需要被认为是四维的?此外,

我有一个预定义颜色的地图和一个给定的颜色来选择一个最近的匹配。如果我将使用距离公式,我是否会计算地图中每个预定义颜色的距离,而不仅仅是在匹配限制之间查找一个键?

是的,您需要迭代地图中的每个颜色并计算距离。另外,颜色是3D的,而std::map是1D的,如果你有很多颜色,你可能需要3D而不是1D的地图来快速查找。虽然只需重复使用一些颜色不会很贵。

颜色比3D复杂一点。你必须考虑亮度以及颜色可能是红色、绿色或蓝色。那么1,0,0比0,1,0更接近255,0,0吗?所以也许颜色需要被认为是四维的?此外,人类对颜色的反应不是线性的,因此,如果你只看两个RGB值之间的数学距离,你将测量一个“距离”,它与人类判断两种颜色之间的距离不一致

对于这种类型或工作,RGB是一种非常不令人满意的颜色测量方法(尽管它便于控制硬件)。许多人建议使用HSL系统,它允许您独立于“颜色”设置亮度,并且应该更接近人类对颜色的反应

有关在此类工作中使用HSL的更多信息,以及在HSL和RGB之间转换的代码,请参阅我前面的答案