#!ruby -Ku # -*- mode: ruby; encoding: utf-8 -*- # Last updated: <2014/06/02 22:55:09 +0900> # # cairo のテスト # # 以下を参考にしました。 # # rcairo 事始め - takihiro日記 # http://d.hatena.ne.jp/takihiro/20100331/1269992290 require 'cairo' require 'dxruby' require 'tempfile' w, h = 640 - 32, 480 - 32 surface = Cairo::ImageSurface.new(w, h) context = Cairo::Context.new(surface) # 背景色を指定 context.set_source_rgba(0, 0, 0, 0) # 透明 context.rectangle(0, 0, w, h) context.fill # 四角を書く context.set_source_color(Cairo::Color::RED) x, y, rw, rh = 20, 20, w / 2, h / 2 context.rectangle(x, y, rw, rh) context.fill_preserve context.set_source_color(Cairo::Color::BLACK) context.stroke # 円を書く 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::BLUE) context.stroke # 多角形 context.set_source_color(Cairo::Color::YELLOW) context.move_to(30, 30) context.line_to(20, 60) context.line_to(40, 80) context.line_to(80, 40) context.line_to(60, 30) context.line_to(30, 30) context.fill_preserve context.set_source_color(Cairo::Color::PURPLE) context.stroke # 重ねる画像を設定 surface2 = Cairo::ImageSurface.from_png('sample2.png') context.set_source(surface2, w - surface2.width - 24, h - surface2.height - 24) context.paint # 文字配置 context.set_source_rgb(255, 255, 255) context.font_size = 26 context.move_to(10, 150) context.show_text('文字') # フォントを指定してないので文字化けする context.move_to(10, 180) context.select_font_face('メイリオ', 0, 0) context.show_text('メイリオフォント') # ---------------------------------------- # 一時ファイルを作成 temp = Tempfile.new(['test', '.png']) temp.binmode temp.close # pngファイルに出力 surface.write_to_png(temp.path) # DXRubyで読み込み img = Image.load(temp.path) temp.close(true) # DXRubyで表示 Window.bgcolor = C_BLUE Window.loop do break if Input.keyPush?(K_ESCAPE) Window.draw(16, 16, img) end