3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

小型TFT液晶に画像を表示するためにcairoのmrubyバインドを作りました。
環境はFreeBSD上で動いているmrubyです。以前からRabbitがバックエンドにcairoを使っているようなので、同じことができるのではないかと考えていました。

TokyoRuby会議16の前に思い出して作ってみました。現地で同じテーブルに座った方には見てもらいました。

とりあえず内容を定義します。

presarr = [["ZRouter.org", "FreeBSDを利用", "MIPS SOC", "uaのrayが始めた"],
        ["mruby", "軽量ruby", "小さいです", "組み込みでも利用可能"],
        ["組み合わせ利用", "簡単にビルド", "いろいろ拡張", "動作安定してます"]]

cairoとLCDのクラスを初期化します。

tft = BsdTft.new(1, 0, BsdTft::S6D0151)
w = 128
h = 160

tft.setsize(w, h)
tft.setreset(RST)
tft.init

c = Cairo.new(w, h)

これに描きます。LCDとcairoの座標が違うので回転させます。

  c.translate(0, h)
  c.rotate(-3.14/2)

タイトルは以下のようにしてます。

  c.set_font_size(14)
  c.font_create("/root/fonts/14x14ja.pcf")

  c.set_source_rgb(0, 0, 0)
# centerling
  arr = c.text_extents(pres[0])
  c.move_to((h - arr[0]) / 2, 15)
  c.show_text(pres[0])

タイトルと項目の区切り線はこうします。

  c.set_source_rgb(0.5, 0.5, 0)
  c.move_to(10, 20)
  c.line_to(150, 20)
  c.stroke();

項目はこうします。省略してます。

  c.set_source_rgb(0, 0, 0)
  c.scale(0.5, 0.5)
  c.print_png(8, 60, RABBIT_PNG + "red-item.png")
  if pres.size > 2
    c.print_png(8, 60 + spac * 2, RABBIT_PNG + "red-item.png")
  end
  c.scale(2, 2)
    
  spac = 18
  c.move_to(16, 40)
  c.show_text(pres[1])
  if pres.size > 2
    c.move_to(16, 40 + spac)
    c.show_text(pres[2])
  end

ウサギと亀を描きます。

  c.scale(0.2, 0.2)
  c.print_png(15*5+kamepos*11*5, 100*5-25, RABBIT_PNG + "mini-kame-taro.png")
  c.print_png(15*5+usapos*12*5, 100*5, RABBIT_PNG + "mini-usa-taro.png")
  c.print_png(5*5, 100*5+25, RABBIT_PNG + "start-flag.png")
  c.print_png(145*5, 100*5+25, RABBIT_PNG + "goal-flag.png")
  c.scale(5, 5)

最後に回転を戻します。

  c.rotate(3.14/2)
  c.translate(0, -h)

描いたものを液晶にSPIで送ります。

tft.lcdcopy(c.get_data)
3
0
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
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?