Как проверить, прозрачен ли Texture2D? - PullRequest
2 голосов
/ 04 декабря 2011

Я хочу проверить, прозрачен ли выбранный прямоугольник:

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

Возможно ли это?

1 Ответ

2 голосов
/ 04 декабря 2011

Да, это возможно. Вы должны убедиться, что все пиксели в регионе прозрачны. Обратите внимание, что это довольно медленная операция.

Вот метод, который должен делать то, что вы хотите:

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).

...