#define filename_width 24
#define filename_height 24
static char filename_bits[] = {
0xFF, 0x3F, 0xFF, 0xFF, 0xDF, 0xFE, 0xFF, 0xEF, 0xFD, 0xFF, 0xF7, 0xFB,
0xFF, 0xF7, 0xFB, 0xFF, 0xFB, 0xFD, 0xFF, 0xFD, 0xFE, 0xFF, 0xFE, 0xFE,
0xFF, 0xFD, 0xFD, 0xFF, 0xF3, 0xFD, 0xFF, 0xFB, 0xFE, 0xFF, 0x7B, 0xFF,
0xFF, 0xBD, 0xFF, 0xFF, 0xDE, 0xFF, 0x7F, 0xDF, 0xFF, 0xFF, 0xBE, 0xFF,
0xFF, 0xDE, 0xFF, 0xFF, 0xEE, 0xFF, 0x7F, 0xF7, 0xFF, 0x7F, 0xFB, 0xFF,
0xBF, 0xFD, 0xFF, 0xBF, 0xFE, 0xFF, 0x5F, 0xFF, 0xFF, 0x9F, 0xFF, 0xFF,
};
因為是記憶體直接對照,所以就是 memory buffer 的格式了,其中的 filename 處為檔案名稱,會直接換成變數名稱,但如果直接出 stdout 所以該處會變成 -這 code 其實 Arduino 中的 Adafruit GFX Library 可以直接吃了,不過需要加工一下
其中 char 要轉成 uint8_t 型態,而黑白顛倒(對 OLED 而言亮的是黑色),所以要 xor 255 也就是把整個 binary 整個反轉過,而 char 轉 uint8_t 時每個 set 都是顛倒的,要換回去才行
完成的程式長這樣,有需要的人可以拿去用哩
# [[Ruby code]]
# need imagemagick , convert all images(gif) & merge to output.txt
target = File.open('output.txt' , 'w')
filenames = Dir["*.gif"]
filenames.each do |filename|
var_name = filename.split(/\./)[0..-2].join('_')
content = `convert #{__dir__}/#{filename} xbm:-`
#re-define var name & change type to uint8_t
content.gsub!(/define \-/ , "define #{var_name}")
content.gsub!(/static char -_bits/ , "static uint8_t #{var_name}_bits")
#inverse color && swap bitmap buffer
content.gsub!(/0x[\dA-F]{2}/) do |source|
source = (source.to_i(16).to_s(2).rjust(8 , '0').reverse.to_i(2) ^ 255).to_s(16).upcase
"0x#{"0" if source.length < 2}#{source}"
end
target.puts(content)
end
target.close
puts "finished , total #{filenames.length} files"
之後把 output.txt 的內容複製貼上到 IDE 內就可以直接使用了呦,超方便的哈哈
沒有留言:
張貼留言