Explore our collection of 150+ developer tools, PDF editors, and image converters. Everything runs locally in your browser.
Ubify Core Engineering Team
SOFTWARE ENGINEERS & SYSTEMS ARCHITECTS
About This Tool
Convert monochrome graphics, icons, and logos into ready-to-flash C and C++ byte arrays directly in your browser. Embedded microcontrollers like the Arduino Nano, ESP32, and Raspberry Pi Pico frequently interface with small 1-bit monochrome displaysโsuch as 128ร64 or 128ร32 SSD1306 and SH1106 OLEDs or electronic paper (e-paper) panelsโwhich lack the flash storage to decode standard PNG or JPEG files.
This tool renders your image onto an HTML5 canvas and converts each pixel into single-bit binary data. You can select between simple thresholding, Floyd-Steinberg error diffusion, or ordered Bayer matrix dithering to render continuous-tone photographs on black-and-white screens. It formats the resulting hexadecimal byte stream for multiple graphics libraries, including Adafruit GFX (horizontal row-by-row byte packing), SSD1306 page mode (vertical 8-pixel column packing), and U8g2 bytecode, complete with C PROGMEM declaration syntax.
For example, configuring a 128ร64 canvas with Adafruit GFX horizontal byte packing generates an array of 1,024 bytes formatted as "const unsigned char PROGMEM epd_bitmap[] = { 0x00, 0xFF, ... };", ready to paste directly into your microcontroller sketch.
All image rendering, dithering, and C array formatting execute client-side in your local browser JavaScript engine. No graphics, firmware assets, or code snippets are uploaded to any server.
How to Use
- 1
Set your target screen width and height in pixels (e.g. 128ร64 for SSD1306 OLEDs).
- 2
Choose a dithering algorithm (Threshold, Floyd-Steinberg, or Bayer) and adjust sensitivity.
- 3
Select your output byte packing format (Adafruit GFX, SSD1306 Page Mode, or U8g2).
- 4
Copy the generated C/C++ PROGMEM byte array directly into your embedded code.
Frequently Asked Questions
What is the difference between Adafruit GFX and SSD1306 Page Mode byte packing?
Adafruit GFX packs 8 horizontal pixels per byte along each row, whereas SSD1306 Page Mode packs 8 vertical pixels per byte across horizontal display pages.
Why does the tool generate the PROGMEM keyword in the C array?
PROGMEM tells AVR and microcontroller compilers to store the large bitmap array in program flash memory rather than scarce SRAM.
Are my images or code arrays uploaded to a remote server?
No. All canvas drawing, pixel dithering, and code generation run entirely locally in your web browser.