rcairoとRMagick

RMagickの良いとこは、一時ファイルを作らずに複数の画像を合成できるところだと思う。
rcairoとRMagickの連係を知るためのプログラムを作った。
export_pixels_to_str で使う mapは、'BGRA' だった。
以前は、黒を使ったからmapが違っても問題なかった。
ちなみに以前の間違ったmapは直しておいた。
下のプログラムで表示されるdisplayはエスケープキーで終了する。
2回エスケープキーを押してプログラムは終了です。

#!usr/bin/env ruby

require 'cairo'
require 'RMagick'

w, h = 100, 200
img = []
[:red, :green, :blue].each do |color|
cairo = Cairo::ImageSurface.new(w, h)
Cairo::Context.new(cairo) do |cr|
cr.set_source_color(color)
cr.rectangle(0, 0,w, h)
cr.fill
end
img << cairo
end
map = 'BGRA'
m_list = Magick::ImageList.new
img.each do |cairo|
m_list << Magick::Image.new(w, h).import_pixels(0,0, w, h, map, cairo.data)
end
md = Magick::Draw.new
md.annotate(m_list[0], 0, 0, 0, 0, "RMagick") do |str|
str.gravity = Magick::CenterGravity
str.pointsize = 20
str.fill = "black"
str.stroke = "white"
end
magick = m_list.append(false)
magick.display
map = 'BGRA'
pixels = magick.export_pixels_to_str(0, 0, magick.columns, magick.rows, map)
cairo = Cairo::ImageSurface.new(pixels, 0, magick.columns, magick.rows, pixels.size / magick.rows)
cairo.write_to_png('/tmp/image')
`display /tmp/image`
[PR]
by gaziya | 2011-05-25 21:04