【问题标题】:Libpng, Palette png with alpha or not?Libpng,Palette png是否带有alpha?
【发布时间】:2012-11-14 05:27:12
【问题描述】:

如何知道调色板 png 是否带有 alpha? 我得到关于图像png_get_IHDR的信息

然后我看color_type - PNG_COLOR_TYPE_PALETTE

但是我不知道如何知道这个 png 图像是否有 alpha 通道。

【问题讨论】:

    标签: c++ png libpng


    【解决方案1】:

    这可能会有所帮助:

    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】:

      PNG 以两种(或三种)完全不同的方式支持透明度:

      1. 具有独立 alpha 通道(RGBA 或 GA)的真彩色或灰度图像

      2. (可选)tRNS chunk 中的透明度额外信息。有两种不同的口味:

        2a。对于索引图像:tRNS 块为一个、几个或所有调色板索引指定一个透明度值(“alpha”)。

        2b。对于真彩色或灰度图像:tRNS 块指定应被视为完全透明的单一颜色值(RGB 或灰色)。

      如果你对case 2a感兴趣,并且如果你正在使用libpng,你应该看看函数png_get_tRNS()

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-07
        • 2016-02-24
        • 2016-07-26
        • 1970-01-01
        • 2014-02-02
        • 2010-12-18
        • 2014-03-30
        • 2012-05-13
        相关资源
        最近更新 更多