Libpng, Palette png com alfa ou não?

Como saber se paleta png está com alfa ou não? Eu recebo informações sobre a imagem png_get_IHDR

Depois disso eu olho para color_type - PNG_COLOR_TYPE_PALETTE

Mas eu não consigo encontrar como saber se esta imagem png tem canal alfa ou não.

O PNG suporta a transparência de duas (ou três) maneiras bem diferentes:

  1. Imagens em colors ou em escala de cinza com um canal alfa separado (RGBA ou GA)

  2. Informações adicionais de transparência no bloco (opcional) do tRNS . Qual tem dois sabores diferentes:

    2a. Para imagens indexadas: o bloco tRNS especifica um valor de transparência (“alfa”) para um, vários ou todos os índices de paleta .

    2b. Para imagens TrueColor ou em tons de cinza: o bloco tRNS especifica um único valor de cor (RGB ou Cinza) que deve ser considerado totalmente transparente.

Se você está interessado no caso 2a , e se você estiver usando libpng, você deve olhar para a function png_get_tRNS ()

isso pode ajudar:

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