Как узнать, палитра png с альфа или нет?
Я получаю информацию об изображении png_get_IHDR
После этого я смотрю на color_type - PNG_COLOR_TYPE_PALETTE
Но я не могу найти, как узнать, имеет ли это изображение PNG альфа-канал или нет.
PNG поддерживает прозрачность двумя (или тремя) совершенно разными способами:
Изображения Truecolor или оттенки серого с разделенным альфа-канал (RGBA или GA)
Прозрачность дополнительной информации в (необязательно) тРНС чанк . Который имеет два разных вкуса:
2а. Для индексированных изображений: блок tRNS определяет значение прозрачности («альфа») для одного, нескольких или всех индексы палитры.
2b. Для изображений в истинном цвете или в оттенках серого: блок tRNS определяет одно значение цвета (RGB или серый), который следует рассматривать как полностью прозрачный.
Если вы заинтересованы в случае 2а, и если вы используете libpng, вы должны посмотреть на функцию png_get_tRNS ()
это может помочь:
if (color_type == PNG_COLOR_TYPE_RGBA || color_type == PNG_COLOR_TYPE_GA)
*alphaFlag = true;
else
{
png_bytep trans_alpha = NULL;
int num_trans = 0;
png_color_16p trans_color = NULL;
png_get_tRNS(png_ptr, info_ptr, &trans_alpha, &num_trans, &trans_color);
if (trans_alpha != NULL)
*alphaFlag = true;
else
*alphaFlag = false;
}