不使用Draw()缩放Texture2D

时间:2013-12-23 17:48:02

标签: c# xna 2d image-manipulation scaling

我尝试在不使用Texture2D方法的情况下缩放Draw()。原因是 在进行进一步的操作之前,我不打算绘制Texture2D。我会将Texture2D保存为字段。

2 个答案:

答案 0 :(得分: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一样,并根据自己的喜好进行操作。

答案 1 :(得分:0)

我能想到的第一件事就是使用Texture2D.GetData并将纹理存储在Coloruint或其他任何数组中,然后执行您的比例。
这将需要一些基本的计算机图形知识,我认为这不是更好的方法。