所以基本上,我需要一种方法,我可以在其中传递红色、绿色和蓝色的值,并且该方法应该返回 RGB 值的组合是否导致明显的红色偏绿色或偏蓝色。如果组合不会产生这三种颜色中的任何一种,它应该返回 false。
我试图通过使用条件语句来做到这一点,尝试了一些变体,但没有一个是准确的。
例如我试过:
if (B > 100 && B > G / 2 && B > R / 2)
{
blueCount++;
}
else if (G > 100 && G > G / 2 && G > B / 2)
{
greenCount++;
}
else if (R > 100 && R > G / 2 && R > B / 2)
{
redCount++;
}
// R , G , B contains 0-255 values
最佳答案
如果您将“有色系”定义为:
那么您的代码看起来几乎不错(只需将
/
替换为 *
)。我只想使用
enum
作为结果:enum Ish
{
Other, // 0 so this would be false if you convert it to bool
Red, // 1
Green, // 2
Blue // 3
}
if (R>100 && R>G*2 && R>B*2)
return Ish.Red;
if (G>100 && G>R*2 && G>B*2) // you had G>G/2 here /!\
return Ish.Green;
if (B>100 && B>G*2 && B>R*2)
return Ish.Blue;
return Ish.Other;
我用了 2 两次,但我认为你可以使用其他值,只要它是
>1
(例如,如果 B <= R
,你不能说蓝色是主导的)这将是 R=100 可能的红色值(左图为因子 2,右图为因子 1):
这对于 R=200(左图为 2,右图为因子 1):
因此,您可能可以使用 1 到 2 之间的系数
对于 R=200,您可以看到红色,具体取决于以下因素:
关于c# - 确定对于给定的 RGB 值组合,哪种颜色(红色、蓝色、绿色或其他)可见?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59856547/