diff options
Diffstat (limited to 'png15.patch')
-rw-r--r-- | png15.patch | 104 |
1 files changed, 104 insertions, 0 deletions
diff --git a/png15.patch b/png15.patch new file mode 100644 index 000000000000..616c3b2cdf26 --- /dev/null +++ b/png15.patch @@ -0,0 +1,104 @@ +Index: src/engine/video/image.cpp +=================================================================== +--- src/engine/video/image.cpp (revision 2040) ++++ src/engine/video/image.cpp (working copy) +@@ -684,9 +684,9 @@ + png_read_png(png_ptr, info_ptr, PNG_TRANSFORM_STRIP_16 | PNG_TRANSFORM_PACKING | PNG_TRANSFORM_EXPAND, NULL); + + // grab the relevant data... +- cols = info_ptr->width; +- rows = info_ptr->height; +- bpp = info_ptr->channels * 8; ++ cols = png_get_image_width(png_ptr, info_ptr); ++ rows = png_get_image_height(png_ptr, info_ptr); ++ bpp = png_get_channels(png_ptr, info_ptr) * 8; + + // and clean up. + png_destroy_read_struct(&png_ptr, &info_ptr, (png_infopp)NULL); +Index: src/engine/video/image_base.cpp +=================================================================== +--- src/engine/video/image_base.cpp (revision 2040) ++++ src/engine/video/image_base.cpp (working copy) +@@ -261,9 +261,9 @@ + uint8** row_pointers = png_get_rows(png_ptr, info_ptr); + + // copy metadata +- width = info_ptr->width; +- height = info_ptr->height; +- pixels = malloc(info_ptr->width * info_ptr->height * 4); ++ width = png_get_image_width(png_ptr, info_ptr); ++ height = png_get_image_height(png_ptr, info_ptr); ++ pixels = malloc(width * height * 4); + + // check that we were able to allocate enough memory for the PNG + if (pixels == NULL) { +@@ -276,18 +276,21 @@ + // convert the damn thing so that it works in our format + // this is mostly just byteswapping and adding extra data - we want everything in four channels + // for the moment, anyway +- uint32 bpp = info_ptr->channels; ++ uint32 bpp = png_get_channels(png_ptr, info_ptr); + uint8* img_pixel = NULL; + uint8* dst_pixel = NULL; + +- if (info_ptr->color_type == PNG_COLOR_TYPE_PALETTE) { ++ if (png_get_color_type(png_ptr, info_ptr) == PNG_COLOR_TYPE_PALETTE) { + // colours come from a palette - for this colour type, we have to look up the colour from the palette ++ png_colorp palette; ++ int num_palette; ++ png_get_PLTE(png_ptr, info_ptr, &palette, &num_palette); + png_color c; +- for (uint32 y = 0; y < info_ptr->height; y++) { +- for (uint32 x = 0; x < info_ptr->width; x++) { ++ for (uint32 y = 0; y < height; y++) { ++ for (uint32 x = 0; x < width; x++) { + img_pixel = row_pointers[y] + (x * bpp); +- dst_pixel = ((uint8*)pixels) + ((y * info_ptr->width) + x) * 4; +- c = info_ptr->palette[img_pixel[0]]; ++ dst_pixel = ((uint8*)pixels) + ((y * width) + x) * 4; ++ c = palette[img_pixel[0]]; + + dst_pixel[0] = c.red; + dst_pixel[1] = c.green; +@@ -297,10 +300,10 @@ + } + } + else if (bpp == 1) { +- for (uint32 y = 0; y < info_ptr->height; y++) { +- for (uint32 x = 0; x < info_ptr->width; x++) { ++ for (uint32 y = 0; y < height; y++) { ++ for (uint32 x = 0; x < width; x++) { + img_pixel = row_pointers[y] + (x * bpp); +- dst_pixel = ((uint8*)pixels) + ((y * info_ptr->width) + x) * 4; ++ dst_pixel = ((uint8*)pixels) + ((y * width) + x) * 4; + dst_pixel[0] = img_pixel[0]; + dst_pixel[1] = img_pixel[0]; + dst_pixel[2] = img_pixel[0]; +@@ -309,10 +312,10 @@ + } + } + else if (bpp == 3) { +- for (uint32 y = 0; y < info_ptr->height; y++) { +- for (uint32 x = 0; x < info_ptr->width; x++) { ++ for (uint32 y = 0; y < height; y++) { ++ for (uint32 x = 0; x < width; x++) { + img_pixel = row_pointers[y] + (x * bpp); +- dst_pixel = ((uint8*)pixels) + ((y * info_ptr->width) + x) * 4; ++ dst_pixel = ((uint8*)pixels) + ((y * width) + x) * 4; + dst_pixel[0] = img_pixel[0]; + dst_pixel[1] = img_pixel[1]; + dst_pixel[2] = img_pixel[2]; +@@ -321,10 +324,10 @@ + } + } + else if (bpp == 4) { +- for (uint32 y = 0; y < info_ptr->height; y++) { +- for (uint32 x = 0; x < info_ptr->width; x++) { ++ for (uint32 y = 0; y < height; y++) { ++ for (uint32 x = 0; x < width; x++) { + img_pixel = row_pointers[y] + (x * bpp); +- dst_pixel = ((uint8*)pixels) + ((y * info_ptr->width) + x) * 4; ++ dst_pixel = ((uint8*)pixels) + ((y * width) + x) * 4; + dst_pixel[0] = img_pixel[0]; + dst_pixel[1] = img_pixel[1]; + dst_pixel[2] = img_pixel[2]; |