C#中的图像颜色重新映射

时间:2018-02-24 22:23:30

标签: c# image image-processing colors

我想用22种颜色来绘制任何图像,只有这22种颜色。

Image image = GetImageFromURL(""); // returns an image object
Bitmap bitmap = new Bitmap(image);

String[] colors = {
    "#FFFFFF", // white
    "#C1C1C1", // light grey
    "#EF130B", // red
    "#FF7100", // orange
    "#FFE400", // yellow
    "#00CC00", // light green
    "#00B2FF", // cyan
    "#231FD3", // blue
    "#A300BA", // purple
    "#D37CAA", // pink
    "#A0522D", // light brown
    "#000000", // black
    "#4C4C4C", // dark grey
    "#740B07", // dark red
    "#C23800", // dark orange
    "#E8A200", // dark yellow
    "#005510", // dark green
    "#00569E", // dark cyan
    "#0E0865", // dark blue
    "#550069", // dark purple
    "#A75574", // dark pink
    "#63300D", // dark brown
};

我怎么做到最好?我目前不知道如何将数十亿种颜色转换为这22种颜色......

我希望得到任何帮助,谢谢。

1 个答案:

答案 0 :(得分:0)

可以使用3D颜色空间中的毕达哥拉斯距离找到每个像素的最接近的颜色匹配。我在这里解释了完整的过程,包括如何以有效的方式将此更改应用于图像:

2012 Version

这个问题是关于双色调色板,但只要使用每像素8位的图像作为结果,任何调色板的过程都完全相同。