7

パレットpngがアルファ付きかどうかを知る方法は? 画像に関する情報を取得しますpng_get_IHDR

その後、私は見ますcolor_type - PNG_COLOR_TYPE_PALETTE

しかし、このpng画像にアルファチャンネルがあるかどうかを知る方法が見つかりません。

4

2 に答える 2

18

PNGは、2つ(または3つ)のまったく異なる方法で透明度をサポートします。

  1. 分離されたアルファチャネル(RGBAまたはGA)を使用したトゥルーカラーまたはグレースケール画像

  2. (オプションの)tRNSチャンクの透明性の追加情報。これには2つの異なるフレーバーがあります。

    2a。インデックス付き画像の場合:tRNSチャンクは、1つ、複数、またはすべてのパレットインデックスの透明度値(「アルファ」)を指定します。

    2b。トゥルーカラーまたはグレースケール画像の場合:tRNSチャンクは、完全に透明であると見なされる単一のカラー値(RGBまたはグレー)を指定します。

ケース2aに関心があり、libpngを使用している場合は、関数png_get_tRNS()を確認する必要があります。

于 2012-11-26T18:32:38.397 に答える
3

これは役立つかもしれません:

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;
}
于 2014-07-06T08:48:13.077 に答える