我正在寻找一种快速确定PNG图像是否具有透明功能的方法。也就是说,图像的任何部分是否是半透明的或以任何方式显示背景。有没有人知道一种简单的方法来检测这个?
更新:好的,是否有一种不那么复杂的方式来提取PNG规范和黑客代码?
答案 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字符串,以使您的代码万无一失。