Cairo::SurfacePattern.new を使う

Cairo::SurfacePattern.newを使えれば、rcairoの能力を大体マスターできたと思う。
結局、Cairo::context#set_source , set_source_colorってのは、形のテキスチャーってことだったんだね。
やっと、理解できたよ。
これからは、RMagickとconvertのマニュアルを見ながら、面白そうなのを探して試してみます。
まあ、これで一息です。フー

#!usr/bin/env ruby

require 'cairo'
require 'RMagick'

w, h = 100, 100
maru = Cairo::ImageSurface.new(w, h)
cr = Cairo::Context.new(maru)
cr.set_source_color(:blue)
cr.rectangle(0, 0,w, h)
cr.fill
cr.set_source_color(:orange)
cr.set_line_width(20)
cr.circle(w / 2, h / 2, 35)
cr.stroke
a= []
mtrx = Cairo::Matrix::translate(w / 2, h / 2)
(-45 .. 314).step(90) do |d|
r= d * Math::PI / 180
a << mtrx.transform_point(Math::cos(r) * 45 , Math::sin(r) * 45)
end
batu = Cairo::ImageSurface.new(w, h)
cr = Cairo::Context.new(batu)
cr.set_source_color(:teal)
cr.rectangle(0, 0,w, h)
cr.fill
cr.set_source_color(:orange)
cr.set_line_width(20)
cr.move_to(a[0][0], a[0][1])
cr.line_to(a[2][0], a[2][1])
cr.move_to(a[1][0], a[1][1])
cr.line_to(a[3][0], a[3][1])
cr.stroke
m_list = Magick::ImageList.new
m_list << Magick::Image.new(w, h).import_pixels(0,0, w, h, 'BGRA', maru.data)
m_list << Magick::Image.new(w, h).import_pixels(0,0, w, h, 'BGRA', batu.data)
m_list << Magick::Image.new(w, h).import_pixels(0,0, w, h, 'BGRA', batu.data)
m_list << Magick::Image.new(w, h).import_pixels(0,0, w, h, 'BGRA', maru.data)
magick = m_list.montage {self.geometry = Magick::Geometry.new(w / 4, h / 4)}
#magick.display
pixels = magick.export_pixels_to_str(0, 0, magick.columns, magick.rows, 'BGRA')
cairo = Cairo::ImageSurface.new(pixels, 0, magick.columns, magick.rows, pixels.size / magick.rows)
ptrn = Cairo::SurfacePattern.new(cairo)
ptrn.set_extend(Cairo::EXTEND_REPEAT)
w, h = 500, 500
image = Cairo::ImageSurface.new(w, h)
cr = Cairo::Context.new(image)
cr.set_source_color(:white)
cr.rectangle(0, 0,w, h)
cr.fill
cr.set_source(ptrn)
cr.set_line_width(100)
cr.circle(w / 2, h / 2, 160)
cr.stroke
Magick::Image.new(w, h).import_pixels(0,0, w, h, 'BGRA', image.data).display
[PR]
by gaziya | 2011-05-26 23:25