]> git.pld-linux.org Git - packages/libgdiplus.git/blob - libgdiplus-libpng.patch
31a1c01629d832eed58440503e10e518f34350ba
[packages/libgdiplus.git] / libgdiplus-libpng.patch
1 $NetBSD: patch-aa,v 1.8 2011/01/21 10:21:51 wiz Exp $
2
3 Fix build with png-1.5.
4
5 --- src/pngcodec.c.orig 2010-11-03 16:52:54.000000000 +0000
6 +++ src/pngcodec.c
7 @@ -116,10 +116,15 @@ gdip_load_png_properties (png_structp pn
8         bitmap_data->dpi_horz = png_get_x_pixels_per_inch(png_ptr, info_ptr);
9         bitmap_data->dpi_vert = png_get_y_pixels_per_inch(png_ptr, info_ptr);
10  #elif defined(PNG_pHYs_SUPPORTED)
11 -       if ((info_ptr->valid & PNG_INFO_pHYs) && (info_ptr->phys_unit_type == PNG_RESOLUTION_METER)) {
12 -               bitmap_data->image_flags |= ImageFlagsHasRealDPI;
13 -               bitmap_data->dpi_horz = info_ptr->x_pixels_per_unit * 0.0254;
14 -               bitmap_data->dpi_vert = info_ptr->y_pixels_per_unit * 0.0254;
15 +       if (png_get_valid (png_ptr, info_ptr, PNG_INFO_pHYs)) {
16 +               png_uint_32 res_x, res_y;
17 +               int unit_type;
18 +               png_get_pHYs (png_ptr, info_ptr, &res_x, &res_y, &unit_type);
19 +               if (unit_type == PNG_RESOLUTION_METER) {
20 +                       bitmap_data->image_flags |= ImageFlagsHasRealDPI;
21 +                       bitmap_data->dpi_horz = res_x * 0.0254;
22 +                       bitmap_data->dpi_vert = res_y * 0.0254;
23 +               }
24         }
25  #endif
26         /* default to screen resolution (if nothing was provided or available) */
27 @@ -130,7 +135,7 @@ gdip_load_png_properties (png_structp pn
28  #if defined(PNG_iCCP_SUPPORTED)
29         {
30                 png_charp       name;
31 -               png_charp       profile;
32 +               png_bytep       profile;
33                 png_uint_32     proflen;
34                 int             compression_type;
35  
36 @@ -292,6 +297,11 @@ gdip_load_png_image_from_file_or_stream 
37                 ImageFlags      colourspace_flag;
38                 int             i;
39                 int             j;
40 +               png_colorp      png_palette;
41 +               int             png_num_palette;
42 +               png_bytep       trans_alpha;
43 +               int             num_trans;
44 +               png_color_16p   trans_color;
45  
46                 width = png_get_image_width (png_ptr, info_ptr);
47                 height = png_get_image_height (png_ptr, info_ptr);
48 @@ -309,6 +319,8 @@ gdip_load_png_image_from_file_or_stream 
49                 }
50  
51                 /* Copy palette. */
52 +               png_get_PLTE (png_ptr, info_ptr, &png_palette, &png_num_palette);
53 +
54                 num_colours = 1 << bit_depth;
55  
56                 if (png_get_color_type (png_ptr, info_ptr) == PNG_COLOR_TYPE_GRAY) {
57 @@ -321,8 +333,8 @@ gdip_load_png_image_from_file_or_stream 
58                         colourspace_flag = ImageFlagsColorSpaceRGB;
59  
60                         palette_entries = num_colours;
61 -                       if (palette_entries > info_ptr->num_palette) {
62 -                               palette_entries = info_ptr->num_palette;
63 +                       if (palette_entries > png_num_palette) {
64 +                               palette_entries = png_num_palette;
65                         }
66  
67                         palette = GdipAlloc (sizeof(ColorPalette) + (num_colours - 1) * sizeof(ARGB));
68 @@ -331,29 +343,30 @@ gdip_load_png_image_from_file_or_stream 
69  
70                         for (i=0; i < palette_entries; i++) {
71                                 set_pixel_bgra (&palette->Entries[i], 0,
72 -                                               info_ptr->palette[i].blue,
73 -                                               info_ptr->palette[i].green,
74 -                                               info_ptr->palette[i].red,
75 +                                               png_palette[i].blue,
76 +                                               png_palette[i].green,
77 +                                               png_palette[i].red,
78                                                 0xFF); /* alpha */
79                         }
80                 }
81  
82 +               png_get_tRNS (png_ptr, info_ptr, &trans_alpha, &num_trans, &trans_color);
83                 /* Make sure transparency is respected. */
84 -               if (info_ptr->num_trans > 0) {
85 +               if (num_trans > 0) {
86                         palette->Flags |= PaletteFlagsHasAlpha;
87                         colourspace_flag |= ImageFlagsHasAlpha;
88  
89 -                       if (info_ptr->num_trans > info_ptr->num_palette) {
90 -                               info_ptr->num_trans = info_ptr->num_palette;
91 +                       if (num_trans > png_num_palette) {
92 +                               num_trans = png_num_palette;
93                         }
94  
95 -                       for (i=0; i < info_ptr->num_trans; i++) {
96 +                       for (i=0; i < num_trans; i++) {
97                                 set_pixel_bgra(&palette->Entries[i], 0,
98 -                                               info_ptr->palette[i].blue,
99 -                                               info_ptr->palette[i].green,
100 -                                               info_ptr->palette[i].red,
101 +                                               png_palette[i].blue,
102 +                                               png_palette[i].green,
103 +                                               png_palette[i].red,
104  #if PNG_LIBPNG_VER > 10399
105 -                                               info_ptr->trans_alpha [i]); /* alpha */
106 +                                               trans_alpha [i]); /* alpha */
107  #else
108                                                 info_ptr->trans[i]); /* alpha */
109  #endif
110 @@ -398,6 +411,8 @@ gdip_load_png_image_from_file_or_stream 
111                 BYTE            bit_depth;
112                 int             stride;
113                 int             interlace;
114 +               png_colorp      png_palette;
115 +               int             png_num_palette;
116                 png_bytep *row_pointers;
117                 BYTE *rawptr;
118                 int i, j;
119 @@ -490,32 +505,33 @@ gdip_load_png_image_from_file_or_stream 
120                                                         png_byte palette = 0;
121                                                         png_byte pix = *rowp++;
122  
123 +                                                       png_get_PLTE (png_ptr, info_ptr, &png_palette, &png_num_palette);
124                                                         palette = (pix >> 6) & 0x03;
125                                                         set_pixel_bgra (rawptr, 0,
126 -                                                               info_ptr->palette[palette].blue,
127 -                                                               info_ptr->palette[palette].green,
128 -                                                               info_ptr->palette[palette].red,
129 +                                                               png_palette[palette].blue,
130 +                                                               png_palette[palette].green,
131 +                                                               png_palette[palette].red,
132                                                                 0xFF); /* alpha */
133  
134                                                         palette = (pix >> 4) & 0x03;
135                                                         set_pixel_bgra (rawptr, 4,
136 -                                                               info_ptr->palette[palette].blue,
137 -                                                               info_ptr->palette[palette].green,
138 -                                                               info_ptr->palette[palette].red,
139 +                                                               png_palette[palette].blue,
140 +                                                               png_palette[palette].green,
141 +                                                               png_palette[palette].red,
142                                                                 0xFF); /* alpha */
143  
144                                                         palette = (pix >> 2) & 0x03;
145                                                         set_pixel_bgra (rawptr, 8,
146 -                                                               info_ptr->palette[palette].blue,
147 -                                                               info_ptr->palette[palette].green,
148 -                                                               info_ptr->palette[palette].red,
149 +                                                               png_palette[palette].blue,
150 +                                                               png_palette[palette].green,
151 +                                                               png_palette[palette].red,
152                                                                 0xFF); /* alpha */
153  
154                                                         palette = pix & 0x03;
155                                                         set_pixel_bgra (rawptr, 12,
156 -                                                               info_ptr->palette[palette].blue,
157 -                                                               info_ptr->palette[palette].green,
158 -                                                               info_ptr->palette[palette].red,
159 +                                                               png_palette[palette].blue,
160 +                                                               png_palette[palette].green,
161 +                                                               png_palette[palette].red,
162                                                                 0xFF); /* alpha */
163                                                         rawptr += 16;
164                                                 }
This page took 0.057672 seconds and 2 git commands to generate.