// This example renders a png file that is stored in a FLASH array // using the PNGdec library (available via library manager). // Image files can be converted to arrays using the tool here: // https://notisrac.github.io/FileToCArray/ // To use this tool: // 1. Drag and drop file on "Browse..." button // 2. Tick box "Treat as binary" // 3. Click "Convert" // 4. Click "Save as file" and move the header file to sketch folder // 5. Open the sketch in IDE // 6. Include the header file containing the array (panda.h in this example) // Include the PNG decoder library #include #include "panda.h" // Image is stored here in an 8 bit array PNG png; // PNG decoder inatance #define MAX_IMAGE_WIDTH 240 // Adjust for your images int16_t xpos = 0; int16_t ypos = 0; // Include the TFT library https://github.com/Bodmer/TFT_eSPI #include "SPI.h" #include // Hardware-specific library TFT_eSPI tft = TFT_eSPI(); // Invoke custom library //==================================================================================== // Setup //==================================================================================== void setup() { Serial.begin(115200); Serial.println("\n\n Using the PNGdec library"); // Initialise the TFT tft.begin(); tft.fillScreen(TFT_BLACK); Serial.println("\r\nInitialisation done."); } //==================================================================================== // Loop //==================================================================================== void loop() { int16_t rc = png.openFLASH((uint8_t *)panda, sizeof(panda), pngDraw); if (rc == PNG_SUCCESS) { Serial.println("Successfully opened png file"); Serial.printf("image specs: (%d x %d), %d bpp, pixel type: %d\n", png.getWidth(), png.getHeight(), png.getBpp(), png.getPixelType()); tft.startWrite(); uint32_t dt = millis(); rc = png.decode(NULL, 0); Serial.print(millis() - dt); Serial.println("ms"); tft.endWrite(); // png.close(); // not needed for memory->memory decode } delay(3000); tft.fillScreen(random(0x10000)); } //=========================================v========================================== // pngDraw //==================================================================================== // This next function will be called during decoding of the png file to // render each image line to the TFT. If you use a different TFT library // you will need to adapt this function to suit. // Callback function to draw pixels to the display void pngDraw(PNGDRAW *pDraw) { uint16_t lineBuffer[MAX_IMAGE_WIDTH]; png.getLineAsRGB565(pDraw, lineBuffer, PNG_RGB565_BIG_ENDIAN, 0xffffffff); tft.pushImage(xpos, ypos + pDraw->y, pDraw->iWidth, 1, lineBuffer); }