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

ken*_*nny 17 .net c# png image

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

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

Ada*_*m P 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;
    }
Run Code Online (Sandbox Code Playgroud)

  • 请记住,使用GetPixel非常慢.您应该使用Bitmap.LockBits方法获取指向图像数据的指针,并使用不安全的代码来处理图像.GetPixel方法将锁定图像位,获取像素数据,构建Color结构,然后在每次调用时解锁图像位,需要更多的处理时间. (11认同)
  • 从循环内返回 true 会更有效,因此如果第一个像素是透明的,则立即退出。 (2认同)