rcairo
インストール
さくらインターネットにrcairo-1.0.0を入れてみた。Windows版のビルドについては とりあえずこちらにメモ。mingwで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
と変更するとコンパイルは通る。
- 追記。cairo-1.2.4の場合。
src/cairoint.hに以下を追加。
#define INT16_MAX 0x7fff #define INT16_MIN (-INT16_MAX - 1)
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オプションをいじる(参考)とかして探せるようにしておく。
うーん、しかしテキストを扱おうとすると
`text_extents': out of memory (NoMemoryError)
とかいわれるな。つーかそもそもフォント入れてないじゃん。 ってことで、/home/HOGEHOGE/fonts/あたりに適当な.ttfとかを入れて、 ~/.fonts.confに
<dir>/home/HOGEHOGE/fonts</dir>
と書けばおっけー。
使い方
処理の流れ
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"の実サイズが得られる。