【问题标题】:How to check if a Texture2D is transparent?如何检查 Texture2D 是否透明?
【发布时间】:2011-12-03 23:55:34
【问题描述】:

我要检查选中的矩形是否透明:

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

有可能吗?

【问题讨论】:

  • 不知道为什么这票数接近...

标签: c# xna xna-4.0 texture2d


【解决方案1】:

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

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

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 中的默认设置)而设计。

【讨论】:

  • 非常感谢,它有效:) 但是GetData的正确语法是:texture.GetData(0, r, buffer, 0, size);
  • 原来如此 - 我已经在我的回答中修正了它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-10-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-05
  • 1970-01-01
相关资源
最近更新 更多