Как найти, что все пиксели в изображении имеют серую шкалу или имеют равные значения 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()