我想使用for循环将图像分成多个texture2ds。
我想做这样的事情:
newTexture = Texture2D.CopyImage(biggerTexture, x, y, width, height);
是否可以这样做?
答案 0 :(得分:0)
我唯一想到的就是使用Texture2D.FromStream()
,但它会读取整个图像文件,因此在您的情况下它不会真正起作用。
我为其中一个游戏做的是创建Texture2D
周围的包装器,它只使用接受源和目标矩形的SpriteBatch.Draw()
重载来绘制纹理的特定部分。
答案 1 :(得分:0)
您是否考虑过使用GetData
和SetData
?
我刚刚编写了一个用于测试目的的扩展方法:
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
重载。