尝试将rgb从.net颜色转换为字符串,如"红色"或"蓝色"

w-l*_*-ll 8 .net c# image colors system.drawing.color

我的所有方法都以各种方式让我失望.不同的灯光也会把它搞得一团糟.

有没有人试图返回一个rgb值的名称?"红色""绿色""蓝色"足以满足我今天的需求.

我对网络摄像头的图像进行了不安全的字节处理.

摄像头

颜色

Bri*_*ian 5

如果你有一个带名字的已知颜色列表,你可以看到给定目标颜色中哪些已知颜色"最接近",使用沿着(F#代码)行的"接近"功能:

let Diff (c1:Color) (c2:Color) =
    let dr = (c1.R - c2.R) |> int
    let dg = (c1.G - c2.G) |> int
    let db = (c1.B - c2.B) |> int
    dr*dr + dg*dg + db*db
Run Code Online (Sandbox Code Playgroud)

无论哪种已知颜色与您想要命名的目标颜色具有最小差异,请使用该名称.


Mar*_*ell 0

嗯,通过检查很容易识别红/绿/蓝;您需要支持什么范围的价值观?

问题是,除非你从一种命名的颜色开始,否则很难回到一种颜色;IsNamedColor即使您通过 FromArgb 创建明显的颜色,也会返回 false。

如果您只需要实际预期的标准颜色,您可以通过反射枚举已知的颜色吗?

        Color test = Color.FromArgb(255,0,0);
        Color known = (
                   from prop in typeof(Color)
                       .GetProperties(BindingFlags.Public | BindingFlags.Static)
                   where prop.PropertyType == typeof(Color)
                   let color = (Color)prop.GetValue(null, null)
                   where color.A == test.A && color.R == test.R
                     && color.G == test.G && color.B == test.B
                   select color)
                   .FirstOrDefault();

        Console.WriteLine(known.Name);
Run Code Online (Sandbox Code Playgroud)

您还可以使用此方法作为更复杂算法的已知颜色来源。

  • 标准颜色的一个稍微简单的来源是 KnownColors 枚举。这样您就不必使用 GetProperties 等(使用 Color.FromKnownColor。) (3认同)