ArduinoでXBMビットマップを解析しようとしていますが、運がまったくありません(<16x16ビットマップが必要です)。多くの検索、調査、いじくり回しを経て、私はこの機能にたどり着きました。私はバイトを正しく読んでいる(テストされている)と確信していますが、変換に何か問題があります。
void bitmap(int x, int y, uint16_t *bitmap, uint8_t w, uint8_t h) {
uint16_t dots, msb;
uint16_t col, row;
msb = 1 << (w - 1);
for (row = 0; row < h; row++) {
dots = pgm_read_word(bitmap + row);
//Serial.print(dots, HEX);
//Serial.println(" ");
for (col = 0; col < w; col++) {
if (dots & (msb >> col))
Serial.print("#"); //toolbox.setPixel(x, y, 1, false);
else
Serial.print("'"); //toolbox.setPixel(x, y, 0, false);
}
Serial.println("");
}
}
これは私が見せようとしているビットマップです。サイズは32x32ピクセルです。16x16以下の画像は正しく表示されます。
// 32x32
uint16_t medium[] PROGMEM = {
0xffff, 0xffff, 0x0000, 0x8000, 0xffff, 0xffff, 0x0001, 0x0000, 0xffff,
0xffff, 0x0000, 0x8000, 0xffff, 0xffff, 0x0001, 0x0000, 0xffff, 0xffff,
0x0000, 0x8000, 0xffff, 0xffff, 0x0001, 0x0000, 0xffff, 0xffff, 0x0000,
0x8000, 0xffff, 0xffff, 0x0001, 0x0000, 0xffff, 0xffff, 0x0000, 0x8000,
0xffff, 0xffff, 0x0001, 0x0000, 0xffff, 0xffff, 0x0000, 0x8000, 0xffff,
0xffff, 0x0001, 0x0000, 0xffff, 0xffff, 0x0000, 0x8000, 0xffff, 0xffff,
0x0001, 0x0000, 0xffff, 0xffff, 0x0000, 0x8000, 0xffff, 0xffff, 0x0001,
0x0000 };
これは、参照用のビットマップのPNGです。