Определите, используется ли Альфа-канал в Изображении

Поскольку я ввожу изображения в свою программу, я хочу определить если:

  1. у них есть альфа-канал
  2. если тот альфа-канал используется

1. Достаточно просто с использованием Image.IsAlphaPixelFormat. Для № 2, хотя, кроме цикличного выполнения через каждый пиксель, там простой путь, я могу определить, имеет ли по крайней мере один из пикселей альфа-канал, который используется (т.е. устанавливается на некоторое другое значение, чем 255)? Все, в чем я нуждаюсь назад, является булевской переменной, и затем я сделаю определение относительно того, сохранить ли его к 32-разрядному или 24-разрядному.

ОБНОВЛЕНИЕ: Я обнаружил тот ImageFlags. HasTranslucent должен предоставить мне тем, что я ищу - к сожалению, он не работает вообще. Например, PNGs с форматами пикселя, которые имеют, по крайней мере, альфа-канал 66 (полупрозрачный), продолжают сообщать False (Использование: if((img.Flags & ImageFlags.HasTranslucent) == 4) ...;). Я протестировал на всех типах изображений, включая .bmp, которые имеют альфа-значение> 0 и <255, и оно все еще сообщает False. Кто-либо когда-нибудь использует это и знает, работает ли это даже в GDI +?

13
задан ChrisF 18 June 2010 в 19:57
поделиться

1 ответ

Вам не нужно перебирать каждый пиксель (ну, можно, но это зависит от изображения). Настройте цикл по всем пикселям, но просто выйдите из цикла, когда вы найдете альфа-значение, отличное от 255, используйте следующий псевдокод:

bool hasAlpha = false;
foreach (var pixel in image)
{
    hasAlpha = pixel.Alpha != 255;
    if (hasAlpha)
    {
        break;
    }
}

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

7
ответ дан 1 December 2019 в 20:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: