rcairoとRMagickの描写比較

cairoとRMagickの描写比較をしたみた。
見た目は、そんなにかわらない。
描き方も比べてみた。
どちらの書き方いいかな?
RMagickは、なんでもできるみたいだし、どういう風に使ったものかな?
cairoで描写したほうが、マトリックス変換に有利かな?
RMagickがドロー系なら、拡大すると画像が荒くなりそうだし。
SDLの位置関係のコントロールもcairoでなれちゃったから、
RMagickは、エフェクト用で使ってみるかな?
ちょっと、試行錯誤してみます。
今回、cairoのフォントの位置関係がよくわからなくなっちゃいました。
また、考えます。

#!usr/bin/env ruby

require 'cairo'
require 'RMagick'

w, h = 200, 200
m_list = Magick::ImageList.new

text = "cairo"
cairo = Cairo::ImageSurface.new(w, h)
cr = Cairo::Context.new(cairo)
cr.set_source_color(:white)
cr.rectangle(0, 0,w, h)
cr.fill
cr.set_source_color(:orange)
cr.circle(w / 2, h / 2, 80)
cr.fill_preserve
cr.set_source_color(:blue)
cr.stroke
cr.set_source_color(:black)
cr.font_size = 70
ext = cr.text_extents(text)
x = w / 2 - ext.x_bearing - ext.width / 2
y = h / 2 + ext.height / 2
cr.move_to(x, y)
cr.show_text(text)
m_list << Magick::Image.new(w, h).import_pixels(0,0, w, h, 'BGRA', cairo.data)

text = "RMagick"
img = Magick::Image.new(w, h)
img.background_color = "white"
gc =Magick::Draw.new
gc.fill('red')
gc.stroke('blue')
gc.circle(w / 2, h / 2, 20, h / 2)
gc.draw(img)
Magick::Draw.new.annotate(img, 0, 0, 0, 0, text) do
self.gravity = Magick::CenterGravity
self.pointsize = 50
self.fill = "black"
self.stroke = "none"
end
m_list << img

cairo = Cairo::ImageSurface.new(w, h)
cr = Cairo::Context.new(cairo)
cr.set_source_color(:white)
cr.rectangle(0, 0,w, h)
cr.fill
cr.move_to(110,100)
cr.rel_line_to(0, -75)
cr.arc(110,100, 75, -90 * Math::PI / 180, 180 * Math::PI / 180)
cr.close_path
cr.set_source_color(:red)
cr.fill_preserve
cr.set_source_color(:blue)
cr.stroke
cr.move_to(97.5, 87.5)
cr.rel_line_to(0, -75)
cr.arc_negative(97.5, 87.5, 75, -90 * Math::PI / 180, 180 * Math::PI / 180)
cr.close_path
cr.set_source_color(:orange)
cr.fill_preserve
cr.set_source_color(:blue)
cr.stroke
m_list << Magick::Image.new(w, h).import_pixels(0,0, w, h, 'BGRA', cairo.data)

img =Magick::Image.new(w, h){self.background_color = "white"}
gc = Magick::Draw.new
gc.fill('red')
gc.stroke('blue')
gc.stroke_width(2)
gc.path('M110,100 h-75 a75,75 0 1,0 75,-75 z')
gc.fill('yellow')
gc.path('M97.5,87.5 v-75 a75,75 0 0,0 -75,75 z')
gc.draw(img)
m_list << img

magick = m_list.montage do
self.background_color = 'black'
self.geometry = Magick::Geometry.new(w, h, 2, 2)
end
magick.display
[PR]
by gaziya | 2011-05-26 20:32