mieki256's diary



2014/06/03(火) [n年前の日記]

#2 [dxruby] cairoの出力結果をファイルを作らずにDXRubyに渡せた

_Cairo::Surfaceクラス を眺めていたら、
write_to_png(stream)
write_to_png(filename)

サーフェスの内容をPNG画像として書き出します。 引数がwriteメソッドを持っている場合はそのオブジェクトの writeメソッドを使ってPNG画像を出力します。

Cairo::Surfaceクラス より

という記述に気がついて。さらにググったら、 _class StringIO が使えそうだなと。

以下で試してみたら、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
しかし、昨日の虎描画版で、同じ処理を試してみても、処理が速くなった感じはしなくて。

もしかすると、ファイル書き込みした直後はキャッシュ?が効いてて、読み込み処理もさほど遅くなかったとか? 実際はどうだか分からんですけど。

以上です。

過去ログ表示

Prev - 2014/06 - Next
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30

カテゴリで表示

検索機能は Namazu for hns で提供されています。(詳細指定/ヘルプ


注意: 現在使用の日記自動生成システムは Version 2.19.6 です。
公開されている日記自動生成システムは Version 2.19.5 です。

Powered by hns-2.19.6, HyperNikkiSystem Project