Windowsのビットマップ形式の画像はシンプルなピクセルデータで,LEDパネルにドット絵として表示するのに使いやすいですね。

32x128や64x128の背景などにも使ってきましたが,今回は32x32の画像に使っています。






原図は「いらすとや」さんの5月のイラストです(^^)。






原図の一部をコピーしてWindowsのペイントソフトで32x32ピクセルの絵にしています。

32x32だとさすがに小さめなので,表示の拡大を最大にし,ペン先を1ピクセルに設定して,修正したりします。







できた画像は24ビットカラーのビットマップ形式で保存し,SDカードにもコピーします。

ファイル名は短く8文字までに!!
 ArduinoのSDライブラリでは,以下によるとファイル名8文字まで,拡張子3文字までという制限があります。
https://www.arduino.cc/reference/en/libraries/sd/







この24ビットカラーのビットマップ形式のデータは0x36番地から,「BGR」の順に1byteずつ並んでいます。BGRの順なので読み込む時にRGBに順序を変えて変数に入れています。

親切な解説
【バイナリエディタ】BMP画像のファイル構造を解析(西住工房さん)


(ビットマップデータの一例)




このデータをSDカードから読み取っているのですが,ビットマップデータの座標は左下が原点のグラフのタイプの座標軸になっています。

一方,LEDパネルやLCDの座標は横書き文章のタイプの左上からの行列になっているので縦軸の逆転が必要です。






以上の注意点を考えながらSDからの取り込み例です。

// get Bit_MAp(24bit color) data from sd
void sd__bitmap_read(String title, byte row, byte column){
File dataFile = SD.open(title);
dataFile.seek(54); // Skip Header
for (byte i=row; i>0 ; i--){ // reverse row
for (byte j=0; j < column; j++){ // column
for (byte k=3; k>0; k--){ // reverse color BGR - > RGB
d_sd[i-1][j][k-1]=dataFile.read();
}
}
}
dataFile.close();
}





以上,絵心のない者にとってフリー素材を原画にしてLEDパネルに使えるのは大助かりですV(^^)。

8x8ドットぐらいの大きさか,1ドットを8色か赤3bit+緑3bit+青2bitの256色で1バイトで表せるなら,32x128ドットぐらいは表計算でも何とか計算できるのですが,,,,1ドットでRGBの3バイトとなるとプログラムでも書かないとやってられない作業になりそうです(^^;;;;;;;;;


ドット絵の世界でもビットマップ形式はもう古いのでしょうか,,あまり使ってくれないみたいですね。

でもデータは圧縮が無くシンプルなのでマイコンのドット物の表示には使いやすいフォーマットだと思っています。