我尝试在不使用Texture2D
方法的情况下缩放Draw()
。原因是
在进行进一步的操作之前,我不打算绘制Texture2D
。我会将Texture2D
保存为字段。
答案 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
并将纹理存储在Color
,uint
或其他任何数组中,然后执行您的比例。
这将需要一些基本的计算机图形知识,我认为这不是更好的方法。