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

问题描述 投票:0回答:1

我有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种颜色......

我要感谢任何帮助,提前谢谢。

c# image image-processing colors
1个回答
0
投票

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

How to convert a colored image to a image that has only two predefined colors?

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

© www.soinside.com 2019 - 2024. All rights reserved.