Le meilleur moyen de réduire le nombre de couleurs dans la palette bitmap

J’ai un bitmap qui contient beaucoup de couleurs différentes. Mais je dois faire un schéma à partir de cette image avec 40 couleurs ou moins. C’est pourquoi j’ai besoin d’une méthode pour réduire le nombre de couleurs dans la palette bitmap.

J’utilise le code ci-dessous pour mon application:

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); 

Cela fonctionne, mais très souvent, je reçois une image avec des pixels clairs sur un fond généralement solide de couleurs plus sombres:

entrez la description de l'image icientrez la description de l'image ici

J’ai essayé de le faire moi-même: approchez-vous de 4 ou 9 pixels (carrés) et mélangez-le. En outre, j’ai essayé de réduire la taille des images et “d’étirer” l’image. En fin de compte, j’ai essayé d’absorber les couleurs les plus proches. Mais le meilleur résultat que j’ai obtenu en utilisant la méthode ci-dessus.

C’est pourquoi je cherche un meilleur moyen de réduire le nombre de couleurs dans la palette bitmap.

Les images PS ont été mises à l’échelle et j’ai également dessiné une grid.

MIS À JOUR:

J’ai essayé d’utiliser scolorq , mais le résultat était le même. Question toujours d’actualité.

Une excellente application avec le code source en C # est disponible ici . Il implémente 8 algorithmes et a des tonnes d’options.