(XNA)从另一个Texture2D中创建一个新的Texture2D

时间:2017-06-26 13:07:19

标签: c# graphics xna monogame texture2d

我想使用for循环将图像分成多个texture2ds。

https://puu.sh/wu16F/44bef38289.png

我想做这样的事情:

newTexture = Texture2D.CopyImage(biggerTexture, x, y, width, height);

是否可以这样做?

2 个答案:

答案 0 :(得分:0)

我唯一想到的就是使用Texture2D.FromStream(),但它会读取整个图像文件,因此在您的情况下它不会真正起作用。

我为其中一个游戏做的是创建Texture2D周围的包装器,它只使用接受源和目标矩形的SpriteBatch.Draw()重载来绘制纹理的特定部分。

答案 1 :(得分:0)

您是否考虑过使用GetDataSetData

我刚刚编写了一个用于测试目的的扩展方法:

public static class TextureExtension
{
    /// <summary>
    /// Creates a new texture from an area of the texture.
    /// </summary>
    /// <param name="graphics">The current GraphicsDevice</param>
    /// <param name="rect">The dimension you want to have</param>
    /// <returns>The partial Texture.</returns>
    public static Texture2D CreateTexture(this Texture2D src, GraphicsDevice graphics, Rectangle rect)
    {
        Texture2D tex = new Texture2D(graphics, rect.Width, rect.Height);
        int count = rect.Width * rect.Height;
        Color[] data = new Color[count];
        src.GetData(0, rect, data, 0, count);
        tex.SetData(data);
        return tex;
    }
}

您现在可以这样称呼它:

newTexture = sourceTexture.CreateTexture(GraphicsDevice, new Rectangle(50, 50, 100, 100));

如果您只想绘制纹理的一部分,可以使用像{domi1819建议的SpriteBatch重载。