From: Grazvydas Ignotas Date: Sat, 29 Jun 2013 00:28:51 +0000 (+0300) Subject: readpng: put image on center if it's too large X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=8ef1ad3218d7677f3dbf279095cd2fc58966547f;p=libpicofe.git readpng: put image on center if it's too large --- diff --git a/readpng.c b/readpng.c index af6bd56..83936ae 100644 --- a/readpng.c +++ b/readpng.c @@ -68,23 +68,28 @@ int readpng(void *dest, const char *fname, readpng_what what, int req_w, int req { case READPNG_BG: { - int height, width, h; + int height, width, h, x_ofs = 0, y_ofs = 0; unsigned short *dst = dest; + if (png_get_bit_depth(png_ptr, info_ptr) != 8) { lprintf(__FILE__ ": bg image uses %ibpc, needed 8bpc\n", png_get_bit_depth(png_ptr, info_ptr)); break; } width = png_get_image_width(png_ptr, info_ptr); - if (width > req_w) + if (width > req_w) { + x_ofs = (width - req_w) / 2; width = req_w; + } height = png_get_image_height(png_ptr, info_ptr); - if (height > req_h) + if (height > req_h) { + y_ofs = (height - req_h) / 2; height = req_h; + } for (h = 0; h < height; h++) { - unsigned char *src = row_ptr[h]; + unsigned char *src = row_ptr[h + y_ofs] + x_ofs * 3; int len = width; while (len--) {