如何检查Texture2D是否透明?

时间:2011-12-03 23:55:35

标签: c# xna xna-4.0 texture2d

我想检查所选矩形是否透明:

spriteBatch.Draw(texture, new Vector2(0, 0), 
           new Rectangle(0, 0, 16, 16), Color.White);

有可能吗?

1 个答案:

答案 0 :(得分:2)

是的,有可能。您必须检查区域中的所有像素是否透明。请注意,这是一个相当慢的操作。

这是一个应该做你想要的方法:

bool IsRegionTransparent(Texture2D texture, Rectangle r)
{
    int size = r.Width * r.Height;
    Color[] buffer = new Color[size];
    texture.GetData(0, r, buffer, 0, size);
    return buffer.All(c => c == Color.Transparent);
}

请注意,我没有编译,测试或优化上述内容。此外,它专为预乘纹理设计(XNA 4.0中的默认设置)。