現在描画している画面を画像として取得する機能
テリ  2022/11/19(Sat) 15:17
表示している画面を画像として取得する機能を探しているのですが
該当の機能を提供するクラスはありますでしょうか。

例えばRPGにおいて、敵とエンカウントする際
現在表示している画面をプレイヤーキャラを中心に急拡大したり
回転しながら縮小したりといった画面演出を行いバトル画面に移行する見せ方がありますが、
それと同じことを実現することは可能でしょうか。

画像として取得できれば、画像の拡縮や回転等は既存の機能を使用できると思いますので、
未実装でしたらぜひ検討していただけると大変ありがたいです。
記事編集
Reputeless  2022/11/23(Wed) 21:15
ScreenCapture::RequestCurrentFrame()
を呼ぶと、シーンの最終描画を次のフレームで
ScreenCapture::GetFrame()
を使って取得できます。ほかには RenderTexture を使う方法もあります。

# include <Siv3D.hpp> // OpenSiv3D v0.6.6

void Main()
{
bool capture = false;

const Texture emoji{ U"&#128008;"_emoji };

DynamicTexture texture;

while (System::Update())
{
if (capture)
{
texture.fill(ScreenCapture::GetFrame());

capture = false;
}

if (KeyA.down())
{
emoji.drawAt(Scene::Center());

ScreenCapture::RequestCurrentFrame();

capture = true;
}

if (texture)
{
Scene::SetBackground(ColorF{ 0.8,0.9,1.0 });

texture.scaled(0.25).draw();
}
}
}
編集
テリ  2022/11/26(Sat) 18:13
回答いただいたサンプルコードで画面を取得できること、
また「ScreenCapture.hpp」の内容を確認しました。

画像処理関連ばかり探していて「キャプチャ」というワードを
完全に失念しておりました。お恥ずかしい限りです。

返答いただきありがとうございました。
編集
件名
Re: 現在描画している画面を画像として取得する機能
名前
コメント
画像添付


投稿修正キー (投稿を修正する時に使います)
画像認証 (右画像の数字を入力) 投稿キー

- WEB PATIO -