1 $NetBSD: patch-aa,v 1.8 2011/01/21 10:21:51 wiz Exp $
3 Fix build with png-1.5.
5 --- src/pngcodec.c.orig 2010-11-03 16:52:54.000000000 +0000
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;
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;
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)
36 @@ -292,6 +297,11 @@ gdip_load_png_image_from_file_or_stream
37 ImageFlags colourspace_flag;
40 + png_colorp png_palette;
41 + int png_num_palette;
42 + png_bytep trans_alpha;
44 + png_color_16p trans_color;
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
52 + png_get_PLTE (png_ptr, info_ptr, &png_palette, &png_num_palette);
54 num_colours = 1 << bit_depth;
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;
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;
67 palette = GdipAlloc (sizeof(ColorPalette) + (num_colours - 1) * sizeof(ARGB));
68 @@ -331,29 +343,30 @@ gdip_load_png_image_from_file_or_stream
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,
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;
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;
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 */
108 info_ptr->trans[i]); /* alpha */
110 @@ -398,6 +411,8 @@ gdip_load_png_image_from_file_or_stream
114 + png_colorp png_palette;
115 + int png_num_palette;
116 png_bytep *row_pointers;
119 @@ -490,32 +505,33 @@ gdip_load_png_image_from_file_or_stream
120 png_byte palette = 0;
121 png_byte pix = *rowp++;
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,
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,
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,
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,