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
> Matplotlib-devel@lists.sourceforge.net
> 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
Matplotlib-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-devel

Reply via email to