1 /*****************************************************************************
2 * RRDtool 1.1.x Copyright Tobias Oetiker, 1997 - 2002
3 *****************************************************************************
4 * pngsize.c determine the size of a PNG image
5 *****************************************************************************/
7 #include <png.h>
9 int
10 PngSize(FILE *fd, long *width, long *height)
11 {
12 png_structp png_read_ptr =
13 png_create_read_struct(PNG_LIBPNG_VER_STRING,
14 (png_voidp)NULL,
15 /* we would need to point to error handlers
16 here to do it properly */
17 (png_error_ptr)NULL, (png_error_ptr)NULL);
19 png_infop info_ptr = png_create_info_struct(png_read_ptr);
21 (*width)=0;
22 (*height)=0;
24 if (setjmp(png_read_ptr->jmpbuf)){
25 png_destroy_read_struct(&png_read_ptr, &info_ptr, (png_infopp)NULL);
26 return 0;
27 }
29 png_init_io(png_read_ptr,fd);
30 png_read_info(png_read_ptr, info_ptr);
31 (*width)=png_get_image_width(png_read_ptr, info_ptr);
32 (*height)=png_get_image_height(png_read_ptr, info_ptr);
34 png_destroy_read_struct(&png_read_ptr, &info_ptr, NULL);
35 if (*width >0 && *height >0)
36 return 1;
37 else
38 return 0;
39 }