检测PNG图像文件是否是透明图像?

时间:2010-04-02 22:31:26

标签: c# .net image png

我正在寻找一种快速确定PNG图像是否具有透明功能的方法。也就是说,图像的任何部分是否是半透明的或以任何方式显示背景。有没有人知道一种简单的方法来检测这个?

更新:好的,是否有一种不那么复杂的方式来提取PNG规范和黑客代码?

3 个答案:

答案 0 :(得分:18)

为什么不循环浏览图像中的所有像素并检查其alpha值?

    bool ContainsTransparent(Bitmap image)
    {
        for (int y = 0; y < image.Height; ++y)
        {
            for (int x = 0; x < image.Width; ++x)
            {
                if (image.GetPixel(x, y).A != 255)
                {
                    return true;
                }
            }
        }
        return false;
    }

答案 1 :(得分:4)

嗯,我仍然完全不理解这个问题,但是如果你只是想检查一下,给定的图像是否可以使用透明度功能,你可以使用这个代码:

Image img = Image.FromFile ( "...", true );
if ( (img.Flags & 0x2) != 0)
{
}

虽然它无法帮助您确定给定的png文件是否实际使用透明功能,但它会根据png文件规范指示它具有颜色类型4或6(均支持透明度)。

答案 2 :(得分:1)

这是一种有效的方法: 以二进制打开PNG。 寻找字节26(如果从零开始计数,则为25)。 评估char的字节值: 2或更低=&gt;绝对不透明, 3或更高=&gt;支持透明度。 根据我的发现,Photoshop生成的文件在需要时仅使用3或更高,这使得这是一种可靠的方式来判断何时使用它们。似乎几乎所有文件都有2个用于opaque,6个用于alpha-blended。 您也可以考虑检查在该常规区​​域中找到的PNG和IHDR字符串,以使您的代码万无一失。