2014/06/03(火) [n年前の日記]
#2 [dxruby] cairoの出力結果をファイルを作らずにDXRubyに渡せた
_Cairo::Surfaceクラス
を眺めていたら、
以下で試してみたら、DXRuby で表示できました。ヤッター。
_test_cairo1_stringio.rb
もしかすると、ファイル書き込みした直後はキャッシュ?が効いてて、読み込み処理もさほど遅くなかったとか? 実際はどうだか分からんですけど。
write_to_png(stream)という記述に気がついて。さらにググったら、 _class StringIO が使えそうだなと。
write_to_png(filename)
サーフェスの内容をPNG画像として書き出します。 引数がwriteメソッドを持っている場合はそのオブジェクトの writeメソッドを使ってPNG画像を出力します。
以下で試してみたら、DXRuby で表示できました。ヤッター。
_test_cairo1_stringio.rb
# cairo のテスト。 # StringIO で DXRuby の Image にデータを渡してみる版 require 'cairo' require 'dxruby' require 'stringio' w, h = 640 - 32, 480 - 32 surface = Cairo::ImageSurface.new(w, h) context = Cairo::Context.new(surface) # 円を書く context.set_line_width(12) context.set_source_color(Cairo::Color::GREEN) r = h / 3 x, y, rw, rh = 100, 30, 50, 50 context.arc(w/2, h/2, r, 0, 2 * Math::PI) context.fill_preserve context.set_source_color(Cairo::Color::RED) context.stroke # StringIOを使って png出力、かつ、Image生成 temp = StringIO.new("", 'w+') surface.write_to_png(temp) temp.rewind img = Image.loadFromFileInMemory(temp.read) # DXRubyで表示 Window.bgcolor = [64, 64, 64] Window.loop do break if Input.keyPush?(K_ESCAPE) Window.draw(16, 16, img) endしかし、昨日の虎描画版で、同じ処理を試してみても、処理が速くなった感じはしなくて。
もしかすると、ファイル書き込みした直後はキャッシュ?が効いてて、読み込み処理もさほど遅くなかったとか? 実際はどうだか分からんですけど。
[ ツッコむ ]
以上です。