SDL::Surface.loadFromIO

SDL::Surface.loadFromIO が、あることに気づいた。
と、言うことは、convart が、いらないと言うことだ。
また、遠回りしました。
url = "http://cairographics.org/cairo-banner.png"
data = `wget -q -O - #{url}`
StringIO.open(data){|s| @surface = SDL::Surface.loadFromIO(s)}
これで、いいみたい。
だけど、 SDL::Surface.load_from_io を使うと
undefined method `load_from_io' for SDL::Surface:Class (NoMethodError)
と、エラーでる。
load_from_io の書き方が、好みなので残念。
ちょっと前に書いたやつを、なおしてみた。

#!usr/bin/env ruby

require 'rubygems'
require 'sdl'
require 'stringio'

class Canvas
def initialize(screen)
@screen = screen
eval = <<EOF
digraph sample1 {
node1 -> node2;
node1 -> node3;
node2 -> node3;
node3 -> node4;
}
EOF
data = `echo '#{eval}' | dot -Tpng`
StringIO.open(data){|s| @surface = SDL::Surface.loadFromIO(s)}
end

def update
@screen.put(@surface,0,0)
end
end

class Phase
def initialize(screen)
@screen = screen
@canvas = Canvas.new(@screen)
end

def update
@canvas.update
end

def handling(e)
exit if e.kind_of?(SDL::Event::Quit) || (e.kind_of?(SDL::Event::KeyDown) && e.sym == SDL::Key::ESCAPE)
end

def run
loop do
while e=SDL::Event.poll
handling(e)
end
update
@screen.flip
SDL.delay(50)
end
end
end

width,height = 160,350
SDL.init(SDL::INIT_VIDEO)
screen = SDL::Screen.open(width,height,SDL::Screen.info.bpp,SDL::SWSURFACE)
Phase.new(screen).run
[PR]
by gaziya | 2011-04-13 22:11