C # сравнить пиксельные форматы - PullRequest
0 голосов
/ 21 ноября 2011

Как мне сравнить пиксельные форматы 2 изображений?

Я пробовал это:

if (img1.PixelFormat > img2.PixelFormat)

, но "Format8bppIndexed" получил оценку больше, чем "Format24bppRgb"

что я делаю не так?

Ответы [ 3 ]

1 голос
/ 17 января 2012

Если вы хотите сравнить изображения по битовой глубине, попробуйте следующее, у меня это сработало:

/// <summary>
/// Returns the bit depth of <paramref name="image"/>.
/// </summary>
public static int GetBitDepth(this Image image)
{
    return ((int) image.PixelFormat >> 8) & 0xFF;
}
1 голос
/ 21 ноября 2011

Сравнение допустимо, но вы просто сравниваете значение перечисления, поэтому результат будет зависеть от порядка, в котором были определены значения.

Если вам нужно сравнить форматы изображений, вам придется самим создавать правила. Какое значение «больше» другого, зависит от вашего приложения.

Как @ Oded предлагает в своем комментарии, вы можете создать Dictionary с ключом PixelFormat, который возвращает правильные относительные значения (глубину цвета) для ваших сравнений, чтобы вернуть разумные результаты и использовать их для ваши тесты.

0 голосов
/ 21 марта 2018

Это старый вопрос, но, поскольку кажется, что никто не опубликовал очевидный ответ на него ... Image.GetPixelFormatSize(pixelformat) возвращает количество использованных бит на пиксель для данного формата пикселей. Так что для Format16bppArgb1555 он вернул бы 16.

Int32 pixSize1 = Image.GetPixelFormatSize(img1.PixelFormat);
Int32 pixSize2 = Image.GetPixelFormatSize(img2.PixelFormat);
if (pixSize1 > pixSize2)
{
    ...
}

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

...