Как найти, что все пиксели в изображении имеют серую шкалу или имеют равные значения R, G, B для каждого отдельного пикселя

Пожалуйста, не цитируйте этоКак я могу проверить глубину цвета растрового изображения? или жеКак проверить, есть ли картинка в оттенках серого

Потому что изображение может быть 24/32 бит на пиксель, даже если все уникальные цвета имеют оттенки серого или меньше 256, а каждый пиксель может быть 24 или 32 бит.

Как мне найти, что пиксель в изображенииBitmap.GetPixel(x, y) имеет равные значения R, G, B, так что я могу узнать, все ли пиксели в изображении находятся в диапазоне серой шкалы. Потому что значение R, G, B пикселя серой шкалы одинаково. Или есть какой-нибудь лучший способ найти изображение в оттенках серого?

Я пишу код для сжатия размера 16/24/32-битного изображения, так что если изображение имеет 256 уникальных цветов, измените его на 8-битное изображение и сохраните его.

Сначала я считаю уникальные цвета на изображении, которое имеет более 8 пикселей на пиксель.

Если уникальные цвета на изображении меньше или равны 256, то

Если все уникальные цвета находятся в диапазоне оттенков серого, преобразуйте его в оттенки серогоВ противном случае, если какой-либо цвет не является оттенками серого, преобразуйте изображение в 8 BPP.

uint UniqueColors(Bitmap Bitmap)
{
    try
    {
        List<int> lstColors = new List<int>();

        if (null == Bitmap)
            return 0;

        for (int iCount = 0; iCount < Bitmap.Height; iCount++)
            for (int iCounter = 0; iCounter < Bitmap.Width; iCounter++)
                if (!lstColors.Contains(Bitmap.GetPixel(iCounter, iCount).ToArgb()))
                    lstColors.Add(Bitmap.GetPixel(iCounter, iCount).ToArgb());

        Bitmap.Dispose();

        return Convert.ToUInt32(lstColors.Count);
    }
    catch (Exception)
    {
        Bitmap.Dispose();
        return 0;
    }
}

А потом:

if (256 >= UniqueColors(new Bitmap(string ImagePath)))
{
    if (Is_Greyscale(new Bitmap(ImagePath))
        Convert_To_Greyscale(ImagePath);
    else
        Convert_To_8Bits(ImagePath);
}

теперь я застрял в том, как мне определить, лежит ли каждый уникальный цвет на изображении в ярости серых. Я имею в виду, что каждый уникальный цвет имеет равные (R, G, B) значения. Как R = G = B. Как я могу найти это в моей строке кода

Bitmap.GetPixel(iCounter, iCount).ToArgb()

Ответы на вопрос(2)

Ваш ответ на вопрос