2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

mrubyでもcairo

Last updated at Posted at 2017-06-19

rubyにはrcairoがありますが、mrubyでも使えるようにmrbgem作ってみました。

使いそうな関数のみバインディングしてあるので、ソースの最後の定義を確認してみてください。

FreeBSDでcairoのpkgをインストールされた環境でビルドできます。もちろんZRouterでもビルドできます。

元々は小型液晶に画像を表示させるためのエンジンとして作ったのですがpng処理などいれてみたので汎用的に使えると思います。

mrubyビルドするときに以下を入れてください。

conf.gem :github => 'yamori813/mruby-cairo'

線を引いてみる

c = Cairo.new(120, 160)
c.set_source_rgb(1, 0, 0)
c.move_to(0, 0)
c.line_to(100, 100)
c.stroke()
c.save_png("test.png");

cairo.png

四角を書いてみる

c.set_line_width(2)
c.rectangle(10, 10, 30, 30)

丸を書いてみる

c.arc(20, 20, 40, 0, 3.14*2);

文字を書いてみる

c.move_to(10, 30)
c.set_source_rgb(1, 0, 1)
c.font_create("6x13.pcf")
c.set_font_size(13)
c.show_text("mruby demo cairo")

漢字も書けます。文字コードはUTF-8です。

c.move_to(20, 13)
c.set_source_rgb(1, 1, 1)
c.font_create("14x14ja.pcf")
c.set_font_size(14)
c.show_text('漢字')
c.stroke();

フォントはビットマップ形式のpcfファイルが使えるのですがbdfファイルの場合はbdftopcfコマンドで変換して使います。フォントのエンコードはiso10646です。ポイント指定がフォントと違ってると表示されないので注意してください。

アウトラインフォントのttfファイルも使えるようです。表示領域が広い場合はttfで狭い場合はpcfが良いです。

文字列を処理するときにはMRB_UTF8_STRINGを定義してmrubyをコンパイルしておくと良いです。デフォルトは設定されてないので、文字列の部分抜き出しとかキャタクタ単位でなくバイト単位となってしまいます。

conf.cc.defines = %w(MRB_UTF8_STRING)

pngファイルを読み込み

c.print_png(5, 20, "foo.png")

ファイルディスクリプタに書き出す

f = File.open("test.png", "w")
c.write_png(f.fileno)

QRCodeなんかも書けます

rcairoは自前での実装があるみたいですが、こちらはほぼ1対1のバインディングです。

結構使えるのではないかと思うので、興味があったら試してみてください。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?