hi list, first, thanks for providing matplotlib, i am using it in several projects.
i had problems with several png files and decided to upgrade libpng. this broke matplotlib. as you can see in the documentation of libpng15, it is no longer possible to directly access png_infop. i have created the following patch: --- matplotlib-1.0.1/src/_png.cpp 2010-10-12 16:14:42.000000000 +0000 +++ matplotlib-1.0.1X/src/_png.cpp 2011-05-25 19:23:36.261752651 +0000 @@ -350,18 +350,21 @@ png_set_sig_bytes(png_ptr, 8); png_read_info(png_ptr, info_ptr); - png_uint_32 width = info_ptr->width; - png_uint_32 height = info_ptr->height; + png_uint_32 width = png_get_image_width(png_ptr, info_ptr); + png_uint_32 height = png_get_image_height(png_ptr, info_ptr); - int bit_depth = info_ptr->bit_depth; + int bit_depth = png_get_bit_depth(png_ptr, info_ptr); // Unpack 1, 2, and 4-bit images if (bit_depth < 8) png_set_packing(png_ptr); + // this is needed several times, so safe it in a variable + png_byte color_type = png_get_color_type(png_ptr, info_ptr); + // If sig bits are set, shift data png_color_8p sig_bit; - if ((info_ptr->color_type != PNG_COLOR_TYPE_PALETTE) && + if ((color_type != PNG_COLOR_TYPE_PALETTE) && png_get_sBIT(png_ptr, info_ptr, &sig_bit)) { png_set_shift(png_ptr, sig_bit); @@ -374,13 +377,13 @@ } // Convert palletes to full RGB - if (info_ptr->color_type == PNG_COLOR_TYPE_PALETTE) + if (color_type == PNG_COLOR_TYPE_PALETTE) { png_set_palette_to_rgb(png_ptr); } // If there's an alpha channel convert gray to RGB - if (info_ptr->color_type == PNG_COLOR_TYPE_GRAY_ALPHA) + if (color_type == PNG_COLOR_TYPE_GRAY_ALPHA) { png_set_gray_to_rgb(png_ptr); } @@ -408,11 +411,11 @@ npy_intp dimensions[3]; dimensions[0] = height; //numrows dimensions[1] = width; //numcols - if (info_ptr->color_type & PNG_COLOR_MASK_ALPHA) + if (color_type & PNG_COLOR_MASK_ALPHA) { dimensions[2] = 4; //RGBA images } - else if (info_ptr->color_type & PNG_COLOR_MASK_COLOR) + else if (color_type & PNG_COLOR_MASK_COLOR) { dimensions[2] = 3; //RGB images } @@ -421,7 +424,7 @@ dimensions[2] = 1; //Greyscale images } //For gray, return an x by y array, not an x by y by 1 - int num_dims = (info_ptr->color_type & PNG_COLOR_MASK_COLOR) ? 3 : 2; + int num_dims = (color_type & PNG_COLOR_MASK_COLOR) ? 3 : 2; double max_value = (1 << ((bit_depth < 8) ? 8 : bit_depth)) - 1; PyArrayObject *A = (PyArrayObject *) PyArray_SimpleNew( kind regards, dieter ------------------------------------------------------------------------------ vRanger cuts backup time in half-while increasing security. With the market-leading solution for virtual backup and recovery, you get blazing-fast, flexible, and affordable data protection. Download your free trial now. http://p.sf.net/sfu/quest-d2dcopy1 _______________________________________________ Matplotlib-devel mailing list Matplotlib-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/matplotlib-devel