On 05/25/2011 10:53 AM, Dieter Schön wrote:
> 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:
Dieter,
Thank you, but the modification has already been made to the master
branch. I did not consider this as a bug fix, so I applied it only to
master, not to the maintenance branch.
Eric
>
> --- 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
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/matplotlib-devel
------------------------------------------------------------------------------
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
[email protected]
https://lists.sourceforge.net/lists/listinfo/matplotlib-devel