class Memopri::Renderer

Attributes

nol[RW]
str[RW]

Public Class Methods

new(str="") click to toggle source
# File lib/memopri/renderer.rb, line 11
def initialize(str="")
  @str = str
end

Public Instance Methods

conv() click to toggle source
# File lib/memopri/renderer.rb, line 15
def conv()
  format = Cairo::FORMAT_ARGB32
  width = nil
  height = 128
  surface = Cairo::ImageSurface.new(format, 0, 128)
  context = Cairo::Context.new(surface)
  layout = context.create_pango_layout
  layout.text = str
  font_description = Pango::FontDescription.new("Sans-serif 18")

  size = nil
  begin
    font_description.size *= 1.06
    layout.font_description = font_description
    size = layout.size.map{|x| x/Pango::SCALE}
  end while size[1] <= 111

  width = size[0] + 5

  surface = Cairo::ImageSurface.new(format, width, 128)
  context = Cairo::Context.new(surface)
  layout = context.create_pango_layout
  layout.text = str
  layout.wrap = Pango::WRAP_CHAR
  layout.font_description = font_description
  context.translate(0, 7)
  context.show_pango_layout(layout)
  context.show_page

  surface.write_to_png("/tmp/memopri-debug.png")

  data = []

  surface.data.unpack("C*").each_slice(4) {|x|
    x = x[3] > 10 ? 1 : 0
    data.push(x)
  }

  data2 = []
  data.each_slice(width) {|x|
    data2.push(x)
  }
  data = data2.transpose.flatten

  ret = []
  data.each_slice(8) {|x|
    ret.push([x.join()].pack("B*"))
  }
  ret = ret.map{|x| x.unpack("C*")[0]}
  return ret
end