5 void readpng(unsigned short *dest, const char *fname)
8 png_structp png_ptr = NULL;
9 png_infop info_ptr = NULL;
10 png_bytepp row_ptr = NULL;
13 if (dest == NULL || fname == NULL)
18 fp = fopen(fname, "rb");
21 printf(__FILE__ ": failed to open: %s\n", fname);
25 png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
28 printf(__FILE__ ": png_create_read_struct() failed\n");
33 info_ptr = png_create_info_struct(png_ptr);
36 printf(__FILE__ ": png_create_info_struct() failed\n");
41 png_init_io(png_ptr, fp);
42 png_read_png(png_ptr, info_ptr, PNG_TRANSFORM_STRIP_16 | PNG_TRANSFORM_STRIP_ALPHA | PNG_TRANSFORM_PACKING, NULL);
43 row_ptr = png_get_rows(png_ptr, info_ptr);
46 printf(__FILE__ ": png_get_rows() failed\n");
50 height = info_ptr->height;
51 if (height > 240) height = 240;
52 width = info_ptr->width;
53 if (width > 320) width = 320;
55 for (h = 0; h < height; h++)
57 unsigned char *src = row_ptr[h];
61 *dest++ = ((src[0]&0xf8)<<8) | ((src[1]&0xf8)<<3) | (src[2] >> 3);
69 png_destroy_read_struct(&png_ptr, info_ptr ? &info_ptr : NULL, (png_infopp)NULL);