不使用Draw()方法对Texture2D进行缩放

3
我想缩放 Texture2D,但不使用 Draw() 方法。 这是因为在执行进一步的操作之前,我不会绘制 Texture2D。 我将把 Texture2D 保存为字段。

我不确定你是否可以直接对Texture2D进行这样的操作。我建议编写一个包装类,其中包含您需要绘制所需的数据。 - SpartanDonut
2个回答

1
我不知道你想对图像进行什么样的操作,但我强烈建议在进行这些操作之前不要进行缩放。如果可能的话,请在缩放之前对图像进行操作。Xna已经为您处理了全部缩放的脏活儿。
如果您想执行特定的像素操作,Texture2D.GetData 可以为您工作,但只适用于少量数据。如果您要对数百个图像执行此操作,将会严重拖慢游戏速度。我强烈建议使用自定义 Effect 进行一些后期处理效果。
编辑:我刚想到一种按你想要的方式完成此操作的方法。您可以将缩放后的纹理绘制到一个 RenderTarget2D 对象上,然后从中获取颜色数据并随意操作数据。以下是示例:
RenderTarget2D renderTarget = new RenderTarget2D(GraphicsDevice, textureWidth, textureHeight, false, GraphicsDevice.PresentationParameters.BackBufferFormat, DepthFormat.Depth24);

GraphicsDevice.SetRenderTarget(renderTarget);

spriteBatch.Begin();
//scale and draw your texture here
spriteBatch.End();

GraphicsDevice.SetRenderTarget(null);

这将纹理绘制到渲染目标中,然后您可以像绘制任何其他纹理一样稍后进行绘制:
spriteBatch.Draw(renderTarget, new Rectangle(), Color.White);

你可以使用renderTarget.GetData来获取颜色数据,就像使用Texture2D一样,并对其进行自己喜欢的操作。

你的将纹理绘制到渲染目标的想法很好,但是我在使用Texture2D.GetData方法时遇到了Color[]大小不正确的问题,而且我不确定如何获得正确的大小。 - eandr127

0
我能想到的第一件事是使用 Texture2D.GetData 并将你的纹理存储在一个 Coloruint 数组中,然后进行缩放。
这需要一些基本的计算机图形学知识,但我认为这不是最好的方法。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接