Gentoo Websites Logo
Go to: Gentoo Home Documentation Forums Lists Bugs Planet Store Wiki Get Gentoo!
View | Details | Raw Unified | Return to bug 355113
Collapse All | Expand All

(-)src/pngcodec.c.orig (-30 / +46 lines)
Lines 116-125 gdip_load_png_properties (png_structp pn Link Here
116
	bitmap_data->dpi_horz = png_get_x_pixels_per_inch(png_ptr, info_ptr);
116
	bitmap_data->dpi_horz = png_get_x_pixels_per_inch(png_ptr, info_ptr);
117
	bitmap_data->dpi_vert = png_get_y_pixels_per_inch(png_ptr, info_ptr);
117
	bitmap_data->dpi_vert = png_get_y_pixels_per_inch(png_ptr, info_ptr);
118
#elif defined(PNG_pHYs_SUPPORTED)
118
#elif defined(PNG_pHYs_SUPPORTED)
119
	if ((info_ptr->valid & PNG_INFO_pHYs) && (info_ptr->phys_unit_type == PNG_RESOLUTION_METER)) {
119
	if (png_get_valid (png_ptr, info_ptr, PNG_INFO_pHYs)) {
120
		bitmap_data->image_flags |= ImageFlagsHasRealDPI;
120
		png_uint_32 res_x, res_y;
121
		bitmap_data->dpi_horz = info_ptr->x_pixels_per_unit * 0.0254;
121
		int unit_type;
122
		bitmap_data->dpi_vert = info_ptr->y_pixels_per_unit * 0.0254;
122
		png_get_pHYs (png_ptr, info_ptr, &res_x, &res_y, &unit_type);
123
		if (unit_type == PNG_RESOLUTION_METER) {
124
			bitmap_data->image_flags |= ImageFlagsHasRealDPI;
125
			bitmap_data->dpi_horz = res_x * 0.0254;
126
			bitmap_data->dpi_vert = res_y * 0.0254;
127
		}
123
	}
128
	}
124
#endif
129
#endif
125
	/* default to screen resolution (if nothing was provided or available) */
130
	/* default to screen resolution (if nothing was provided or available) */
Lines 130-136 gdip_load_png_properties (png_structp pn Link Here
130
#if defined(PNG_iCCP_SUPPORTED)
135
#if defined(PNG_iCCP_SUPPORTED)
131
	{
136
	{
132
		png_charp	name;
137
		png_charp	name;
133
		png_charp	profile;
138
		png_bytep	profile;
134
		png_uint_32	proflen;
139
		png_uint_32	proflen;
135
		int		compression_type;
140
		int		compression_type;
136
141
Lines 292-297 gdip_load_png_image_from_file_or_stream Link Here
292
		ImageFlags	colourspace_flag;
297
		ImageFlags	colourspace_flag;
293
		int		i;
298
		int		i;
294
		int		j;
299
		int		j;
300
		png_colorp	png_palette;
301
		int		png_num_palette;
302
		png_bytep	trans_alpha;
303
		int		num_trans;
304
		png_color_16p	trans_color;
295
305
296
		width = png_get_image_width (png_ptr, info_ptr);
306
		width = png_get_image_width (png_ptr, info_ptr);
297
		height = png_get_image_height (png_ptr, info_ptr);
307
		height = png_get_image_height (png_ptr, info_ptr);
Lines 309-314 gdip_load_png_image_from_file_or_stream Link Here
309
		}
319
		}
310
320
311
		/* Copy palette. */
321
		/* Copy palette. */
322
		png_get_PLTE (png_ptr, info_ptr, &png_palette, &png_num_palette);
323
312
		num_colours = 1 << bit_depth;
324
		num_colours = 1 << bit_depth;
313
325
314
		if (png_get_color_type (png_ptr, info_ptr) == PNG_COLOR_TYPE_GRAY) {
326
		if (png_get_color_type (png_ptr, info_ptr) == PNG_COLOR_TYPE_GRAY) {
Lines 321-328 gdip_load_png_image_from_file_or_stream Link Here
321
			colourspace_flag = ImageFlagsColorSpaceRGB;
333
			colourspace_flag = ImageFlagsColorSpaceRGB;
322
334
323
			palette_entries = num_colours;
335
			palette_entries = num_colours;
324
			if (palette_entries > info_ptr->num_palette) {
336
			if (palette_entries > png_num_palette) {
325
				palette_entries = info_ptr->num_palette;
337
				palette_entries = png_num_palette;
326
			}
338
			}
327
339
328
			palette = GdipAlloc (sizeof(ColorPalette) + (num_colours - 1) * sizeof(ARGB));
340
			palette = GdipAlloc (sizeof(ColorPalette) + (num_colours - 1) * sizeof(ARGB));
Lines 331-359 gdip_load_png_image_from_file_or_stream Link Here
331
343
332
			for (i=0; i < palette_entries; i++) {
344
			for (i=0; i < palette_entries; i++) {
333
				set_pixel_bgra (&palette->Entries[i], 0,
345
				set_pixel_bgra (&palette->Entries[i], 0,
334
						info_ptr->palette[i].blue,
346
						png_palette[i].blue,
335
						info_ptr->palette[i].green,
347
						png_palette[i].green,
336
						info_ptr->palette[i].red,
348
						png_palette[i].red,
337
						0xFF); /* alpha */
349
						0xFF); /* alpha */
338
			}
350
			}
339
		}
351
		}
340
352
353
		png_get_tRNS (png_ptr, info_ptr, &trans_alpha, &num_trans, &trans_color);
341
		/* Make sure transparency is respected. */
354
		/* Make sure transparency is respected. */
342
		if (info_ptr->num_trans > 0) {
355
		if (num_trans > 0) {
343
			palette->Flags |= PaletteFlagsHasAlpha;
356
			palette->Flags |= PaletteFlagsHasAlpha;
344
			colourspace_flag |= ImageFlagsHasAlpha;
357
			colourspace_flag |= ImageFlagsHasAlpha;
345
358
346
			if (info_ptr->num_trans > info_ptr->num_palette) {
359
			if (num_trans > png_num_palette) {
347
				info_ptr->num_trans = info_ptr->num_palette;
360
				num_trans = png_num_palette;
348
			}
361
			}
349
362
350
			for (i=0; i < info_ptr->num_trans; i++) {
363
			for (i=0; i < num_trans; i++) {
351
				set_pixel_bgra(&palette->Entries[i], 0,
364
				set_pixel_bgra(&palette->Entries[i], 0,
352
						info_ptr->palette[i].blue,
365
						png_palette[i].blue,
353
						info_ptr->palette[i].green,
366
						png_palette[i].green,
354
						info_ptr->palette[i].red,
367
						png_palette[i].red,
355
#if PNG_LIBPNG_VER > 10399
368
#if PNG_LIBPNG_VER > 10399
356
						info_ptr->trans_alpha [i]); /* alpha */
369
						trans_alpha [i]); /* alpha */
357
#else
370
#else
358
						info_ptr->trans[i]); /* alpha */
371
						info_ptr->trans[i]); /* alpha */
359
#endif
372
#endif
Lines 398-403 gdip_load_png_image_from_file_or_stream Link Here
398
		BYTE		bit_depth;
411
		BYTE		bit_depth;
399
		int		stride;
412
		int		stride;
400
		int		interlace;
413
		int		interlace;
414
		png_colorp	png_palette;
415
		int		png_num_palette;
401
		png_bytep *row_pointers;
416
		png_bytep *row_pointers;
402
		BYTE *rawptr;
417
		BYTE *rawptr;
403
		int i, j;
418
		int i, j;
Lines 490-521 gdip_load_png_image_from_file_or_stream Link Here
490
							png_byte palette = 0;
505
							png_byte palette = 0;
491
							png_byte pix = *rowp++;
506
							png_byte pix = *rowp++;
492
507
508
							png_get_PLTE (png_ptr, info_ptr, &png_palette, &png_num_palette);
493
							palette = (pix >> 6) & 0x03;
509
							palette = (pix >> 6) & 0x03;
494
							set_pixel_bgra (rawptr, 0,
510
							set_pixel_bgra (rawptr, 0,
495
								info_ptr->palette[palette].blue,
511
								png_palette[palette].blue,
496
								info_ptr->palette[palette].green,
512
								png_palette[palette].green,
497
								info_ptr->palette[palette].red,
513
								png_palette[palette].red,
498
								0xFF); /* alpha */
514
								0xFF); /* alpha */
499
515
500
							palette = (pix >> 4) & 0x03;
516
							palette = (pix >> 4) & 0x03;
501
							set_pixel_bgra (rawptr, 4,
517
							set_pixel_bgra (rawptr, 4,
502
								info_ptr->palette[palette].blue,
518
								png_palette[palette].blue,
503
								info_ptr->palette[palette].green,
519
								png_palette[palette].green,
504
								info_ptr->palette[palette].red,
520
								png_palette[palette].red,
505
								0xFF); /* alpha */
521
								0xFF); /* alpha */
506
522
507
							palette = (pix >> 2) & 0x03;
523
							palette = (pix >> 2) & 0x03;
508
							set_pixel_bgra (rawptr, 8,
524
							set_pixel_bgra (rawptr, 8,
509
								info_ptr->palette[palette].blue,
525
								png_palette[palette].blue,
510
								info_ptr->palette[palette].green,
526
								png_palette[palette].green,
511
								info_ptr->palette[palette].red,
527
								png_palette[palette].red,
512
								0xFF); /* alpha */
528
								0xFF); /* alpha */
513
529
514
							palette = pix & 0x03;
530
							palette = pix & 0x03;
515
							set_pixel_bgra (rawptr, 12,
531
							set_pixel_bgra (rawptr, 12,
516
								info_ptr->palette[palette].blue,
532
								png_palette[palette].blue,
517
								info_ptr->palette[palette].green,
533
								png_palette[palette].green,
518
								info_ptr->palette[palette].red,
534
								png_palette[palette].red,
519
								0xFF); /* alpha */
535
								0xFF); /* alpha */
520
							rawptr += 16;
536
							rawptr += 16;
521
						}
537
						}

Return to bug 355113