Textureの情報をImageに渡す方法
たなだ 2016/11/12(Sat) 17:53
Reputeless 2016/11/12(Sat) 20:31
DynamicTexture や Texture の中身にはアクセスできません。
[A]
スクリーンキャプチャを使う方法が一番簡単です。
https://github.com/Siv3D/Reference-JP/wiki/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88#%E7%9B%B4%E5%89%8D%E3%81%AE%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0%E3%82%92-image-%E3%81%A8%E3%81%97%E3%81%A6%E5%8F%96%E5%BE%97%E3%81%99%E3%82%8B
[B]
RenderTexture に描いた結果を DDS ファイルに保存し、それを Image で読み込むのもありです。
# include <Siv3D.hpp>
void Main()
{
const Texture texture(L"Example/Windmill.png");
RenderTexture renderTexture(640, 480, ColorF(0.0, 0.0));
Graphics2D::SetRenderTarget(renderTexture);
Graphics2D::SetBlendState(BlendState::Opaque);
{
texture.rotate(30_deg).draw();
}
Graphics2D::SetBlendState(BlendState::Default);
Graphics2D::SetRenderTarget(Graphics::GetSwapChainTexture());
// System::Update() か Graphics::Render2D() するまで実際には draw() されない
Graphics::Render2D();
// 描画されたら DDS 形式で保存。これは Image で読み込める。
renderTexture.saveDDS(L"result.dds");
}
RenderTexture ではアンチエイリアスを有効にできません。
ジャギーが気になるのであれば、大きいサイズに描画したのちに Image::scale() で縮小してください。