减少位图调色板中颜色数量的最佳方法

我有一个包含很多不同颜色的位图。 但我需要用这种图像制作一个40色或更少颜色的方案。 这就是为什么我需要方法来减少位图调色板中的颜色数量。

我正在使用下面的代码为我的应用程序:

using System.Windows.Media.Imaging; //BitmapSource ================================================== //Create palette of requied color. Pay heed to maxColorCount it //can have any value, but PixelFormats supports only 2,4,16 and 256 colors. var myPalette = new BitmapPalette(ConvertBitmap(b) as BitmapSource, 16); newFormatedBitmapSource.DestinationPalette = myPalette; //Set PixelFormats newFormatedBitmapSource.DestinationFormat = PixelFormats.Indexed8; newFormatedBitmapSource.EndInit(); b = BitmapFromSource(newFormatedBitmapSource); 

它可以工作,但很多时候我会在较暗的颜色的大部分固体背景上收到带有明亮像素的图像:

在此处输入图像描述在此处输入图像描述

我试着自己做:最近的4或9像素(正方形)并混合它。 我还尝试减少位图大小并“拉伸”位图。 最后我试图吸收最近的颜色。 但是我用上面的方法得到的最好的结果。

这就是为什么我正在寻找更好的方法来减少位图调色板中的颜色数量。

PS图像被缩放,我还在它们上面画了一个网格。

更新:

我试图使用scolorq ,但结果是一样的。 问题仍然相关。

这里有一个很棒的带有C#源代码的应用程序。 它实现了8种算法,并有大量选项。