首页 > 解决方案 > 将渐变中的颜色转换为 int 值

问题描述

我有一个颜色与渐变后的值相对应的图像。

我的渐变是这样的:

渐变图像

我的图像看起来像这样:

我的图像样本

我搜索了一种方法来转换图像中的像素颜色以从此渐变中找到正确的值(在 C# 中)。例如:黑色像素的值为 320,白色像素的值为 16000,...

我找到了这篇文章,但答案与我正在寻找的相反...将 int 值转换为渐变中的颜色

任何人都可以提供一些帮助吗?

更新:

我找到/制作这段代码来重新调整最接近的颜色,但我不确定找到值的精度......

    private void pictureBox1_Click(object sender, MouseEventArgs e)
    {
        var zone_data = img.GetPixel(e.Location.X, e.Location.Y);

        var colors = new List<Color> { Color.Black, Color.SaddleBrown, Color.Purple, Color.Blue, Color.Cyan, Color.Green, Color.Yellow, Color.Orange, Color.Red, Color.Salmon, Color.LightGray, Color.White };

        Console.WriteLine("Nearest color : " + colors[closestColor(colors, zone_data)].ToString());
    }
    public int closestColor(List<Color> colors, Color target)
    {
        var colorDiffs = colors.Select(n => ColorDiff(n, target)).Min(n => n);
        return colors.FindIndex(n => ColorDiff(n, target) == colorDiffs);
    }
    public int ColorDiff(Color c1, Color c2)
    {
        return (int)Math.Sqrt((c1.R - c2.R) * (c1.R - c2.R)
                               + (c1.G - c2.G) * (c1.G - c2.G)
                               + (c1.B - c2.B) * (c1.B - c2.B));
    }

标签: c#imagecolorsgradient

解决方案


推荐阅读