Move image_png() to send_data; implement clipping to dispWin

This commit is contained in:
Pim van Pelt
2017-11-26 21:47:09 +01:00
parent 25cad76432
commit 80acd6ec7b

View File

@ -2246,8 +2246,10 @@ int mgos_ili9341_png(int x, int y, char *fname)
{ {
upng_t* upng; upng_t* upng;
const uint8_t *png_buf; const uint8_t *png_buf;
uint16_t i,j; uint16_t j;
color_t pixel; uint16_t width, height;
uint16_t write_width;
uint16_t write_lines;
int ret = -1; int ret = -1;
@ -2266,19 +2268,27 @@ int mgos_ili9341_png(int x, int y, char *fname)
goto exit; goto exit;
} }
// Do stuff with upng data // 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); png_buf = upng_get_buffer(upng);
disp_select();
for(j=0; j<upng_get_height(upng); j++) { LOG(LL_DEBUG, ("dispwin (%d,%d) - (%d,%d)", dispWin.x1, dispWin.y1, dispWin.x2, dispWin.y2));
for(i=0; i<upng_get_width(upng); i++) { // Ensure we fit in the dispWin.
pixel.r = *png_buf++; write_lines = height;
pixel.g = *png_buf++; if (write_lines > (dispWin.y2-dispWin.y1-y)) write_lines = dispWin.y2-dispWin.y1-y;
pixel.b = *png_buf++;
mgos_ili9341_drawPixel(i, j, pixel, 0); 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<write_lines; j++) {
disp_select();
send_data(x+dispWin.x1, y+j+dispWin.y1, x+dispWin.x1+write_width, y+j+dispWin.y1, write_width, (color_t *)png_buf);
disp_deselect();
png_buf+=width*3;
} }
disp_deselect();
exit: exit: