Поскольку я ввожу изображения в свою программу, я хочу определить если:
1. Достаточно просто с использованием Image.IsAlphaPixelFormat
. Для № 2, хотя, кроме цикличного выполнения через каждый пиксель, там простой путь, я могу определить, имеет ли по крайней мере один из пикселей альфа-канал, который используется (т.е. устанавливается на некоторое другое значение, чем 255
)? Все, в чем я нуждаюсь назад, является булевской переменной, и затем я сделаю определение относительно того, сохранить ли его к 32-разрядному или 24-разрядному.
ОБНОВЛЕНИЕ: Я обнаружил тот ImageFlags. HasTranslucent должен предоставить мне тем, что я ищу - к сожалению, он не работает вообще. Например, PNGs с форматами пикселя, которые имеют, по крайней мере, альфа-канал 66 (полупрозрачный), продолжают сообщать False
(Использование: if((img.Flags & ImageFlags.HasTranslucent) == 4) ...;
). Я протестировал на всех типах изображений, включая .bmp, которые имеют альфа-значение> 0 и <255, и оно все еще сообщает False
. Кто-либо когда-нибудь использует это и знает, работает ли это даже в GDI +?
Вам не нужно перебирать каждый пиксель (ну, можно, но это зависит от изображения). Настройте цикл по всем пикселям, но просто выйдите из цикла, когда вы найдете альфа-значение, отличное от 255, используйте следующий псевдокод:
bool hasAlpha = false;
foreach (var pixel in image)
{
hasAlpha = pixel.Alpha != 255;
if (hasAlpha)
{
break;
}
}
Вам нужно только проверить все пиксели на изображения, которые не есть какая-то альфа. Для изображений, у которых есть альфа-канал, это проявится довольно быстро.