rcairo
このページのソースです。
!インストール さくらインターネットに*rcairo-1.0.0>http://cairographics.org/rcairo*を入れてみた。 -cairoのインストール まずcairo-1.0.2のインストール。 -freetypeをインストール。 -fontconfig をインストール どっちかがexpat を要求するのでインストール。 -cairo をインストール GNU makeの新しいバージョンを要求されたのでインストール。 {{{ setenv PKG_CONFIG_PATH /home/HOGEHOGE/lib/pkgconfig ./configure --prefix=/home/HOGEHOGE --enable-pdf --enable-ps }}} pixman/src/pixman.h の98行目でエラーがでるので、 {{{ stdint.h -> inttypes.h }}} に変更 test/Makefileでpthreadが見つからず。古いFreeBSDではpthreadはc_rという名前のようだ。 その関係で、 {{{ -lpthread -> -pthread }}} と変更するとコンパイルは通る。 -rcairoをインストール {{{ setenv PKG_CONFIG_PATH /home/HOGEHOGE/lib/pkgconfig }}} して {{{ ruby setup.rb config ruby setup.rb setup ruby setup.rb install --prefix=/home/HOGEHOGE }}} 実行時にはlibcairoが見えないといけないので、 {{{ setenv LD_LIBRARY_PATH /home/HOGEHOGE/lib }}} を設定するとか、Makefileの-Rオプションをいじる(*参考>http://ashitani.jp/diary/?date=20060818*)とかして探せるようにしておく。 うーん、しかしテキストを扱おうとすると {{{ `text_extents': out of memory (NoMemoryError) }}} とかいわれるな。つーかそもそもフォント入れてないじゃん。 !使い方 !!処理の流れ Surface を用意する。200x200は画像サイズ。 {{{ surface = Cairo::ImageSurface.new(Cairo::FORMAT_ARGB32, 200, 200) }}} Surface上に何か書くときは、Contextを作ってstrokeする、を繰り返す。 {{{ c = Cairo::Context.new(surface) #例えば、線を書く c.set_source_rgb(0,0,0) c.move_to(0,100) c.lone_to(200,100) #Surfaceに対して描画 c.stroke }}} 描画済みのSurfaceを、たとえばpngファイルに落とす。 {{{ surface.write_to_png("test.png") }}} Contextがいまいちわかりにくいし説明しにくいが、描画の手順。 Contextに描画手順を登録して、strokeで実際に描画、というイメージ。 まだよくわかってないのだけど、フォントサイズや色など、strokeするまでに変更すると後に設定したものが反映されるっぽい。また、strokeしたらpathは消えてしまう。 !!線を書く {{{ c.move_to(x0,y0) # (x0,y0) にペンを移動 c.line_to(x1,y1) # (x1,y1)まで線を引く c.line_to(x2,y2) # さらに(x2,y2)まで線を引く }}} !!線のスタイルを変える {{{ c.set_source_rgb(0.0, 0.0, 0.0) # 色。R,G,B の濃さをそれぞれ0.0から1.0で表す c.set_line_width(4) # 太さ。ピクセル指定? c.set_dash([5,5],2.5) # 点線の指定。5ピクセル書いて5ピクセル休む、 # のを2.5ピクセルのオフセットをつけて書く。 # 行列はOn,Offのパターンを指定するものなので、 #行列サイズを増やせば一点鎖線などが書ける }}} !!文字 utfにすれば日本語もさっくりOk。 {{{ c.move_to(100,100) str=Uconv.euctou8("テスト表示") c.show_text(str) }}} !!フォント指定 {{{ c.select_font_face("times", 0,0) c.select_font_face("mikachan", 0,0) c.select_font_face("kochi gothic", 0,0) }}} などなど。Win環境でMS明朝を出したければフォント名をutf8でencodeするのかな。 !!文字サイズ取得 {{{ c.text_extents("hoge").width }}} などのようにtext_extentsで現在のContextの設定(フォントサイズとか)で の"hoge"の実サイズが得られる。