Como descobrir que todos os pixels em uma imagem estão na escala de cinza ou têm o valor R, G, B igual para cada pixel individual

Por favor, não cite issoComo posso verificar a profundidade de cores de um bitmap? ouComo verificar se uma imagem está em cinza

Como uma imagem pode ter 24/32 bits por pixel, mesmo que todas as cores exclusivas tenham escala de cinza ou menos que 256 e cada pixel possa ter 24 ou 32 bits.

Como faço para descobrir que o pixel em uma imagemBitmap.GetPixel(x, y) possui valores R, G, B iguais para que eu possa descobrir se todos os pixels de uma imagem estão na faixa de escala de cinza. Como o valor R, G, B de um pixel em escala de cinza é o mesmo. Ou existe alguma maneira melhor de descobrir se a imagem está na escala de cinza?

Estou escrevendo um código para compactar o tamanho de uma imagem de 16/24/32 bits, de modo que, se a imagem tiver 256 cores exclusivas, altere-a para imagem de 8 bits e salve-a.

Primeiro conto cores únicas em uma imagem com mais de 8 pixels por pixel.

Se as cores exclusivas da imagem forem menores ou iguais a 256,

Se todas as cores exclusivas estiverem na faixa de escala de cinza, converta-a em escala de cinzaCaso contrário, se alguma cor não estiver em escala de cinza, converta a imagem em 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;
    }
}

E depois:

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

agora estou preso, como descobrir se cada cor única da imagem se encontra na fúria das cinzas. Com o que quero dizer que cada cor única tem valores iguais (R, G, B). Como R = G = B. Como posso encontrá-lo na minha linha de código

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

questionAnswers(2)

yourAnswerToTheQuestion