XNAメモ – テクスチャアの保存方法 / スクリーンショットの実装方法

Posted: 2012年1月22日 カテゴリー: プログラミングメモ, XNA, XNAメモ
タグ:, , , , , , , , , ,

今回は、テクスチャアの内容をファイルに保存する方法をメモります。その過程として、スクリーンショットもどきを作ります(実際は、ゲームの内用をテクスチャアに描画するだけです)。

まず、レンダーターゲットを初期化します。サイズは、ゲーム画面(ウィンドウ)と同じサイズにしときます。詳しくは、前に書いた記事をご参照ください。

RenderTarget2D m_renderTarget;
protected override void LoadContent()
{
spriteBatch = new SpriteBatch(GraphicsDevice);
m_renderTarget = new RenderTarget2D(GraphicsDevice, graphics.PreferredBackBufferWidth, graphics.PreferredBackBufferHeight);
 

そして、実際にスクリーンショット(もどき)を作るメソッドを書きます。手順は、レンダーターゲットにゲームの内用を描き込み、保存されている画像の内用をSaveAsPng()メソッドでpngファイルに保存します。

private void TakeScreenShot()
{
// 描画するレンダーターゲットを設定する
GraphicsDevice.SetRenderTarget(m_renderTarget);

// 描画先のレンダーターゲットの内容を消す
GraphicsDevice.Clear(Color.Transparent);

// レンダーターゲットへの描画を開始
spriteBatch.Begin();

// ゲームの内用を描画する
DrawContent();

// レンダーターゲットへの描画を終了
spriteBatch.End();

// 描画先を、画面に変える
GraphicsDevice.SetRenderTarget(null);

// ファイルストリームを開く
string path = "screenshot.png";
using (System.IO.Stream stream = System.IO.File.OpenWrite(path))
{
// レンダーターゲットの内用をpngファイルとして保存
m_renderTarget.SaveAsPng(stream, m_renderTarget.Width, m_renderTarget.Height);
}
}
 

後は、キーが押されたらこのメソッドを呼び込むだけです。

if (Input.IsPressed(Keys.S))
{
TakeScreenShot();
}
 

出来た画像:

作製された画像は、上記のコードのままですと、.exeが作られるフォルダと同じディレクトリに保存されます。

ちなみに、pngファイル以外にもTexture2Dクラスのメソッドで、SaveAsJpeg()メソッドを使用するとjpegファイルとしても保存できます。また、SaveAsPng()メソッドの第2、第3引数(サイズ指定)を変更すると、違うサイズに保存できます。

以上です。もっとちゃんとしたスクリーンショットの方法を思いついたら、その時にメモります。

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中