C# сравнить пиксельные форматы
Как я могу сравнить пиксельные форматы 2 изображений?
я пробовал это:
if (img1.PixelFormat > img2.PixelFormat)
но "Format8bppIndexed" был оценен как больше, чем "Format24bppRgb"
Что я делаю неправильно?
3 ответа
Сравнение допустимо, но вы просто сравниваете значение перечисления, поэтому результат будет зависеть от порядка, в котором были определены значения.
Если вам нужно сравнить форматы изображений, вам придется самим создавать правила. Какое значение "больше" другого, зависит от вашего приложения.
Как предполагает Oded в своем комментарии, вы можете создать Dictionary
под ключ с PixelFormat
который возвращает правильные относительные значения (глубину цвета) для ваших сравнений, чтобы получить разумные результаты и использовать их для ваших тестов.
Если вы хотите сравнить изображения по их битовой глубине, попробуйте следующее, это сработало для меня:
/// <summary>
/// Returns the bit depth of <paramref name="image"/>.
/// </summary>
public static int GetBitDepth(this Image image)
{
return ((int) image.PixelFormat >> 8) & 0xFF;
}
Это старый вопрос, но поскольку кажется, что никто не опубликовал очевидный ответ на него... Image.GetPixelFormatSize(pixelformat)
возвращает количество использованных битов на пиксель для данного формата пикселей. Таким образом, для Format16bppArgb1555
это вернется 16
,
Int32 pixSize1 = Image.GetPixelFormatSize(img1.PixelFormat);
Int32 pixSize2 = Image.GetPixelFormatSize(img2.PixelFormat);
if (pixSize1 > pixSize2)
{
...
}
Хотя я действительно удивляюсь, почему вы когда-либо проверяли это, если не проводить различие между индексированными форматами, где преобразование в более низкий BPP может означать, что более высокие индексы палитры вам стало невозможно писать.