diff -ur metapixel-1.0.2.orig/rwimg/rwpng.c metapixel-1.0.2/rwimg/rwpng.c --- metapixel-1.0.2.orig/rwimg/rwpng.c 2006-12-10 19:59:54.000000000 +0200 +++ metapixel-1.0.2/rwimg/rwpng.c 2011-09-13 13:49:13.000000000 +0300 @@ -57,19 +57,19 @@ data->end_info = png_create_info_struct(data->png_ptr); assert(data->end_info != 0); - if (setjmp(data->png_ptr->jmpbuf)) + if (setjmp(data->png_jmpbuf(png_ptr))) assert(0); png_init_io(data->png_ptr, data->file); png_read_info(data->png_ptr, data->info_ptr); - *width = data->info_ptr->width; - *height = data->info_ptr->height; + *width = data->png_get_image_width(png_ptr, info_ptr); + *height = data->png_get_image_height(png_ptr, info_ptr); - assert(data->info_ptr->bit_depth == 8 || data->info_ptr->bit_depth == 16); - assert(data->info_ptr->color_type == PNG_COLOR_TYPE_RGB || data->info_ptr->color_type == PNG_COLOR_TYPE_RGB_ALPHA); - assert(data->info_ptr->interlace_type == PNG_INTERLACE_NONE); + assert(data->png_get_bit_depth(png_ptr, info_ptr) == 8 || data->png_get_bit_depth(png_ptr, info_ptr) == 16); + assert(data->png_get_color_type(png_ptr, info_ptr) == PNG_COLOR_TYPE_RGB || data->png_get_color_type(png_ptr, info_ptr) == PNG_COLOR_TYPE_RGB_ALPHA); + assert(data->png_get_interlace_type(png_ptr, info_ptr) == PNG_INTERLACE_NONE); data->have_read = 0; @@ -84,29 +84,29 @@ int bps, spp; unsigned char *row; - if (setjmp(data->png_ptr->jmpbuf)) + if (setjmp(data->png_jmpbuf(png_ptr))) assert(0); - if (data->info_ptr->color_type == PNG_COLOR_TYPE_RGB) + if (data->png_get_color_type(png_ptr, info_ptr) == PNG_COLOR_TYPE_RGB) spp = 3; else spp = 4; - if (data->info_ptr->bit_depth == 16) + if (data->png_get_bit_depth(png_ptr, info_ptr) == 16) bps = 2; else bps = 1; - row = (unsigned char*)malloc(data->info_ptr->width * spp * bps); + row = (unsigned char*)malloc(data->png_get_image_width(png_ptr, info_ptr) * spp * bps); for (i = 0; i < num_lines; ++i) { int j, channel; png_read_row(data->png_ptr, (png_bytep)row, 0); - for (j = 0; j < data->info_ptr->width; ++j) + for (j = 0; j < data->png_get_image_width(png_ptr, info_ptr); ++j) for (channel = 0; channel < 3; ++channel) - lines[i * data->info_ptr->width * 3 + j * 3 + channel] = row[j * spp * bps + channel * bps]; + lines[i * data->png_get_image_width(png_ptr, info_ptr) * 3 + j * 3 + channel] = row[j * spp * bps + channel * bps]; } free(row); @@ -119,7 +119,7 @@ { png_data_t *data = (png_data_t*)_data; - if (setjmp(data->png_ptr->jmpbuf)) + if (setjmp(data->png_jmpbuf(png_ptr))) assert(0); if (data->have_read) @@ -148,7 +148,7 @@ data->info_ptr = png_create_info_struct(data->png_ptr); assert(data->info_ptr != 0); - if (setjmp(data->png_ptr->jmpbuf)) + if (setjmp(data->png_jmpbuf(png_ptr))) assert(0); if (pixel_stride == 4) @@ -156,18 +156,24 @@ png_init_io(data->png_ptr, data->file); - data->info_ptr->width = width; - data->info_ptr->height = height; - data->info_ptr->valid = 0; - data->info_ptr->rowbytes = width * 3; - data->info_ptr->palette = 0; - data->info_ptr->num_palette = 0; - data->info_ptr->num_trans = 0; - data->info_ptr->bit_depth = 8; - data->info_ptr->color_type = PNG_COLOR_TYPE_RGB; - data->info_ptr->compression_type = PNG_COMPRESSION_TYPE_DEFAULT; - data->info_ptr->filter_type = PNG_FILTER_TYPE_DEFAULT; - data->info_ptr->interlace_type = PNG_INTERLACE_NONE; + png_colorp palette; + int num_palette; + int num_trans; + int compression_type; + int filter_type; + + data->png_get_image_width(png_ptr, info_ptr) = width; + data->png_get_image_height(png_ptr, info_ptr) = height; + data->png_get_valid(png_ptr, info_ptr) = 0; + data->png_get_rowbytes(png_ptr, info_ptr) = width * 3; + data->palette = 0; + data->num_palette = 0; + data->num_trans = 0; + data->png_get_bit_depth(png_ptr, info_ptr) = 8; + data->png_get_color_type(png_ptr, info_ptr) = PNG_COLOR_TYPE_RGB; + data->compression_type = PNG_COMPRESSION_TYPE_DEFAULT; + data->filter_type = PNG_FILTER_TYPE_DEFAULT; + data->png_get_interlace_type(png_ptr, info_ptr) = PNG_INTERLACE_NONE; png_write_info(data->png_ptr, data->info_ptr); @@ -182,7 +188,7 @@ png_data_t *data = (png_data_t*)_data; int i; - if (setjmp(data->png_ptr->jmpbuf)) + if (setjmp(data->png_jmpbuf(png_ptr))) assert(0); for (i = 0; i < num_lines; ++i) @@ -194,7 +200,7 @@ { png_data_t *data = (png_data_t*)_data; - if (setjmp(data->png_ptr->jmpbuf)) + if (setjmp(data->png_jmpbuf(png_ptr))) assert(0); png_write_end(data->png_ptr, data->info_ptr);