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 BPPuint 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()