#!ruby -Ku # -*- mode: ruby; coding: utf-8 -*- # Last updated: <2017/04/16 17:24:44 +0900> # # cairo(rcairo)の描画テスト # # 参考ページ # Rubyist Magazine - cairo: 2 次元画像描画ライブラリ # http://magazine.rubyist.net/?0019-cairo require 'cairo' require 'stringio' require 'dxruby' w, h = 640, 480 # サーフェイス作成 surface = Cairo::ImageSurface.new(Cairo::FORMAT_ARGB32, w, h) # コンテキスト作成。コレを使って描画していく context = Cairo::Context.new(surface) # 背景相当を描画。サーフェイス全体を透明色で塗り潰し context.set_source_rgba(0, 0, 0, 0) # r, g, b, a context.rectangle(0, 0, w, h) # 矩形を指定 context.fill # 塗り潰し # 赤丸を描画 context.set_source_rgb(1, 0, 0) # r, g, b radius = h / 3 context.arc(w / 2, h / 2, radius, 0, 2 * Math::PI) # 円を指定 context.fill # StringIOを使ってpng出力 # StringIOを使うと、文字列にファイルと同様のインターフェイスを持たせられる # つまり、メモリ上にファイルを作成しているのと似た状態になる temp = StringIO.new("", 'w+') surface.write_to_png(temp) temp.rewind # アクセス位置を最初に戻す # DXRubyのImageとして読み込む img = Image.loadFromFileInMemory(temp.read) temp.close # DXRubyで表示 Window.bgcolor = [64, 64, 64] Window.loop do break if Input.keyPush?(K_ESCAPE) Window.draw(0, 0, img) end