diff --git a/libs/ili9341/src/ili9341.c b/libs/ili9341/src/ili9341.c index 91eccd6..387f904 100644 --- a/libs/ili9341/src/ili9341.c +++ b/libs/ili9341/src/ili9341.c @@ -2246,8 +2246,10 @@ int mgos_ili9341_png(int x, int y, char *fname) { upng_t* upng; const uint8_t *png_buf; - uint16_t i,j; - color_t pixel; + uint16_t j; + uint16_t width, height; + uint16_t write_width; + uint16_t write_lines; int ret = -1; @@ -2266,19 +2268,27 @@ int mgos_ili9341_png(int x, int y, char *fname) goto exit; } // Do stuff with upng data - LOG(LL_INFO, ("%s: w=%d h=%d size=%d bpp=%d bitdepth=%d pixelsize=%d", fname, upng_get_width(upng), upng_get_height(upng), upng_get_size(upng), upng_get_bpp(upng), upng_get_bitdepth(upng), upng_get_pixelsize(upng))); + width = upng_get_width(upng); + height = upng_get_height(upng); + LOG(LL_DEBUG, ("%s: w=%d h=%d size=%d bpp=%d bitdepth=%d pixelsize=%d", fname, width, height, upng_get_size(upng), upng_get_bpp(upng), upng_get_bitdepth(upng), upng_get_pixelsize(upng))); png_buf = upng_get_buffer(upng); - disp_select(); - for(j=0; j (dispWin.y2-dispWin.y1-y)) write_lines = dispWin.y2-dispWin.y1-y; + + write_width = width; + if (write_width > (dispWin.x2-dispWin.x1-x)) write_width = dispWin.x2-dispWin.x1-x; + LOG(LL_DEBUG, ("Start at (%d,%d), write_width=%d, write_lines=%d", dispWin.x1+x, dispWin.y1+y, write_width, write_lines)); + + for(j=0; j