Libpng, палитра png с альфой или нет?

Как узнать, палитра png с альфа или нет?
Я получаю информацию об изображении png_get_IHDR

После этого я смотрю на color_type - PNG_COLOR_TYPE_PALETTE

Но я не могу найти, как узнать, имеет ли это изображение PNG альфа-канал или нет.

3

Решение

PNG поддерживает прозрачность двумя (или тремя) совершенно разными способами:

  1. Изображения Truecolor или оттенки серого с разделенным альфа-канал (RGBA или GA)

  2. Прозрачность дополнительной информации в (необязательно) тРНС чанк . Который имеет два разных вкуса:

    2а. Для индексированных изображений: блок tRNS определяет значение прозрачности («альфа») для одного, нескольких или всех индексы палитры.

    2b. Для изображений в истинном цвете или в оттенках серого: блок tRNS определяет одно значение цвета (RGB или серый), который следует рассматривать как полностью прозрачный.

Если вы заинтересованы в случае , и если вы используете libpng, вы должны посмотреть на функцию png_get_tRNS ()

9

Другие решения

это может помочь:

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;
}
2

По вопросам рекламы [email protected]