2013/07/31(水) [n年前の日記]
#2 [ruby] DXRubyのRenderTargetでハマり中
画面に表示したソレを、全フレーム分、画像ファイルとして保存したいのですが。最低限、24FPSで1分30秒ぐらいは保存したい。
今までは、Window.getScreenShot() を使って保存してたのだけど。それだと、他のウインドウが上に重なった際に、そのウインドウの内容まで一緒に保存してしまってよろしくないことに気付いたり。
そこで、RenderTargetに一旦描画して、RenderTarget#toImage で Image に変換して、Image#save で画像ファイルとして保存するように変更してみたわけで。これなら、内部で画像を作って保存できるから、前述のような問題は出ないはずだと…。
ところが、数百フレームほど保存すると、セグメントエラーが発生してしまって。Windows.getScreenShot() を使ってる時は出なかったんだけどなあ。うーん。
まあ、元々ドキュメントにも、toImage や save は遅いから毎フレーム呼ぶようなことは避けろ、と書いてあったりするので、もしかすると今までそこそこ動いてたほうが不思議なのかなと思ったりもするわけですけど。
例外を補足して、何度かリトライするように書いてみたのだけど、どうも一度エラーを吐くと、その後は正常動作しないようで。RenderTarget の再生成をしてみたり、sleep を入れてみたり等してみたのだけど、上手く行かず。
今までは、Window.getScreenShot() を使って保存してたのだけど。それだと、他のウインドウが上に重なった際に、そのウインドウの内容まで一緒に保存してしまってよろしくないことに気付いたり。
そこで、RenderTargetに一旦描画して、RenderTarget#toImage で Image に変換して、Image#save で画像ファイルとして保存するように変更してみたわけで。これなら、内部で画像を作って保存できるから、前述のような問題は出ないはずだと…。
ところが、数百フレームほど保存すると、セグメントエラーが発生してしまって。Windows.getScreenShot() を使ってる時は出なかったんだけどなあ。うーん。
まあ、元々ドキュメントにも、toImage や save は遅いから毎フレーム呼ぶようなことは避けろ、と書いてあったりするので、もしかすると今までそこそこ動いてたほうが不思議なのかなと思ったりもするわけですけど。
例外を補足して、何度かリトライするように書いてみたのだけど、どうも一度エラーを吐くと、その後は正常動作しないようで。RenderTarget の再生成をしてみたり、sleep を入れてみたり等してみたのだけど、上手く行かず。
[ ツッコむ ]
以上です。