No, but meanwhile I did. At the end the working solution even though not every PNG-to-XBM converter is working (the one that did the job is linked below)
My workflow ended up in doing this:
- Resizing *.png using IrfanView
- Convert *.png to *.xbm using this URL
- Checked the result using this xbm-Viewer
And did some iterations until I got it runing using PROGMEN. Which was my fault - the documentation of u8g2-Library is saying it correctly, but I missed the detail ... (see comment in code below)
#include <U8g2lib.h>
#include <SPI.h>
// Purpose is to display the raven via XBM-Printing function of u8g2
// 30. March 2025
// Constructor for Display
//U8G2_SH1106_128X64_WINSTAR_F_4W_HW_SPI u8g2(U8G2_R2, 10, 9, 8);
U8G2_SH1106_128X64_WINSTAR_1_4W_HW_SPI u8g2(U8G2_R2, 10, 9, 8);
// The raven itself
#define raven_width 64
#define raven_height 64
static const byte raven_bits[] U8X8_PROGMEM = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x01, 0x00, 0x00, 0x00, 0x00,
0x00, 0x80, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0x07,
0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0x00,
0x80, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0x3F,
0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x7F,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x7F, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xFE, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF,
0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00,
0x00, 0xC0, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x7F,
0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00,
0x00, 0xFC, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF,
0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00,
0xC0, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0xFF,
0x00, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00,
0xF8, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0xFF,
0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x80,
0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0xFF, 0xFF, 0x7F,
0x00, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0xF8,
0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0xFF, 0x3F,
0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0x80, 0xFF,
0xFF, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F,
0x00, 0x00, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0x00, 0x00, 0xFC, 0xFF,
0xFF, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0x03,
0x00, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0x00, 0xC0, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0x01, 0x00, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00,
0x00, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0x3F, 0x00, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0x00,
0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0x00, 0xE0, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0x03, 0x00, 0xF0, 0xFF, 0xFF, 0x7F, 0xF0, 0xFF, 0x01, 0x00,
0xF8, 0xFF, 0xFF, 0x01, 0xC0, 0xFF, 0x00, 0x00, 0x80, 0xFF, 0x1F, 0x00,
0x80, 0xFF, 0x00, 0x00, 0xC0, 0xFF, 0x07, 0x00, 0x80, 0xE3, 0x00, 0x00,
0xF0, 0xFF, 0x01, 0x00, 0x80, 0xE3, 0x00, 0x00, 0xFC, 0x7F, 0x00, 0x00,
0x80, 0xE3, 0x01, 0x00, 0xFE, 0x1F, 0x00, 0x00, 0x80, 0xC3, 0x03, 0x00,
0xFF, 0x07, 0x00, 0x00, 0x80, 0x87, 0x03, 0x06, 0xF8, 0x01, 0x00, 0x00,
0x00, 0x0F, 0xCF, 0x1B, 0x18, 0x00, 0x00, 0x00, 0x00, 0x1E, 0xFF, 0x01,
0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0x00,
0x00, 0xFF, 0x7F, 0x18, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0x3F, 0x00,
0x00, 0x00, 0x00, 0x00, 0x60, 0x40, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
// =======================================================================================================
const byte displayWidth = 128;
const byte displayHeight = 64;
// =======================================================================================================
void setup() {
// All put into setup, as just raven is to show once
u8g2.begin();
u8g2.clearBuffer(); // clear the internal memory
u8g2.firstPage();
do {
// Logo - HERE: use u8g2.drawXBMP .. with the 'P' when array is stored in P(!)ROGMEM
u8g2.drawXBMP((displayWidth - raven_width)/2 , 0, raven_width, raven_height, raven_bits);
} while ( u8g2.nextPage() );
}
void loop() {
while(1);
}
And the bird itself