#!ruby -Ku # -*- mode: ruby; coding: utf-8 -*- # Last updated: <2017/04/16 23:41:07 +0900> # # cairo(rcairo) + DXRuby の描画テストその2 # サーフェイスのデータを変換してDXRubyのImageにしてみる例 # # 参考ページ # Rubyist Magazine - cairo: 2 次元画像描画ライブラリ # http://magazine.rubyist.net/?0019-cairo require 'cairo' require 'dxruby' w, h = 640, 480 surface = Cairo::ImageSurface.new(Cairo::FORMAT_ARGB32, w, h) ct = Cairo::Context.new(surface) ct.set_source_color(Cairo::Color::RED) radius = h / 3 ct.arc(w / 2, h / 2, radius, 0, 2 * Math::PI) ct.fill # DXRubyのImageに変換。StringIOを使わない版 src = surface.data.unpack("L*") # 32bit符号無し整数の配列を得る dst = [] (w * h).times do |i| argb = src[i] a = (argb >> 24) & 0x0ff r = (argb >> 16) & 0x0ff g = (argb >> 8) & 0x0ff b = argb & 0x0ff dst << a << r << g << b end # 配列からDXRubyのImageを作成 img = Image.createFromArray(w, h, dst) # DXRubyで表示 Window.bgcolor = [64, 64, 64] Window.loop do break if Input.keyPush?(K_ESCAPE) Window.draw(0, 0, img) end