私は Windows Phone XNA 向けに開発を行っており、完全なイメージが必要ない場合にメモリへの影響を減らすために、より小さいサイズのテクスチャをロードしたいと考えています。
私の現在の解決策は、rendertarget を使用して描画し、その rendertarget を使用する小さなテクスチャとして返すことです。
public static Texture2D LoadResized(string texturePath, float scale)
{
Texture2D texLoaded = Content.Load<Texture2D>(texturePath);
Vector2 resizedSize = new Vector2(texLoaded.Width * scale, texLoaded.Height * scale);
Texture2D resized = ResizeTexture(texLoaded, resizedSize);
//texLoaded.Dispose();
return resized;
}
public static Texture2D ResizeTexture(Texture2D toResize, Vector2 targetSize)
{
RenderTarget2D renderTarget = new RenderTarget2D(
GraphicsDevice, (int)targetSize.X, (int)targetSize.Y);
Rectangle destinationRectangle = new Rectangle(
0, 0, (int)targetSize.X, (int)targetSize.Y);
GraphicsDevice.SetRenderTarget(renderTarget);
GraphicsDevice.Clear(Color.Transparent);
SpriteBatch.Begin();
SpriteBatch.Draw(toResize, destinationRectangle, Color.White);
SpriteBatch.End();
GraphicsDevice.SetRenderTarget(null);
return renderTarget;
}
これは、テクスチャのサイズが変更されるという点で機能しますが、メモリ使用量から、テクスチャ「texLoaded」が解放されないように見えます。コメント化されていない Dispose メソッドを使用すると、SpriteBatch.End() は破棄された例外をスローします。
メモリ使用量を減らすためにサイズ変更されたテクスチャをロードする他の方法はありますか?