rcairo にプラス色々してsurfaceに (ruby/sdl)

rcairoにmimeTexとflydrawとconvertをくっつけた。
これで、いろんな事ができるだろう。
ちょっと、
mimetex -s 7 -d '#{eval}' | convert - png:-

convert: tRNS chunk has out-of-range samples for bit_depth `-' @ warning/png.c/PNGWarningHandler/1457.
とメッセージを出すけど、動くから一時保留です。

irbにプログラム全部のコピペで簡単に試せます。

#!usr/bin/env ruby

require 'rubygems'
require 'sdl'
require 'cairo'

@image = Cairo::ImageSurface.new(450,400)
context = Cairo::Context.new(@image)
context.set_source_color(Cairo::Color::WHITE)
context.rectangle(0, 0, @image.width, @image.height)
context.fill
context.set_source_color(Cairo::Color::PINK)
context.arc(150, 100, 100, 0, 2 * Math::PI)
context.fill

eval = <<EOF
new 400,400
range -5,5,-20,20
linewidth 2
plot black,pow(x,3)-12*pow(x,1)
EOF

IO.popen("echo '#{eval}' | flydraw | convert -transparent white - png:-") do |io|
@image1 = Cairo::ImageSurface.from_png(io)
end

command = "-rotate '45'"
IO.popen("convert #{command} - -","r+") do |io|
@image1.write_to_png(io)
io.close_write
@image1 = Cairo::ImageSurface.from_png(io)
end
context.set_source(@image1, -100, -100)
context.paint

eval = "f(x)=x^5+8x^4+18x^3+4x^2-19x-12"
IO.popen("mimetex -s 7 -d '#{eval}'| convert - png:-") do |io|
@image1 = Cairo::ImageSurface.from_png(io)
end
context.set_source(@image1, 0, 120)
context.paint

context.set_source_color(Cairo::Color::RED)
context.font_size = 25
context.move_to(100, 50)
context.show_text('日本語')

@surface = SDL::Surface.new_from(@image.data,@image.width,@image.height,32,@image.stride,0,0,0,0)
@surface.saveBMP("/tmp/image.bmp")
`display /tmp/image.bmp`
[PR]
by gaziya | 2011-04-16 11:47