readpng: put image on center if it's too large

This commit is contained in:
Grazvydas Ignotas 2013-06-29 03:28:51 +03:00
parent 6282e17ef5
commit 8ef1ad3218

View file

@ -68,23 +68,28 @@ int readpng(void *dest, const char *fname, readpng_what what, int req_w, int req
{ {
case READPNG_BG: case READPNG_BG:
{ {
int height, width, h; int height, width, h, x_ofs = 0, y_ofs = 0;
unsigned short *dst = dest; unsigned short *dst = dest;
if (png_get_bit_depth(png_ptr, info_ptr) != 8) 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)); lprintf(__FILE__ ": bg image uses %ibpc, needed 8bpc\n", png_get_bit_depth(png_ptr, info_ptr));
break; break;
} }
width = png_get_image_width(png_ptr, info_ptr); 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; width = req_w;
}
height = png_get_image_height(png_ptr, info_ptr); 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; height = req_h;
}
for (h = 0; h < height; 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; int len = width;
while (len--) while (len--)
{ {