From ff3f2a9d8490381047920173a563dcdd30efa700 Mon Sep 17 00:00:00 2001 From: Vicki Pfau Date: Sat, 25 Mar 2023 01:43:22 -0700 Subject: [PATCH] Util: Strip loading 16-bit PNGs down to 8-bit --- src/util/png-io.c | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/src/util/png-io.c b/src/util/png-io.c index 6c25f399c..80c7a9d7c 100644 --- a/src/util/png-io.c +++ b/src/util/png-io.c @@ -279,6 +279,14 @@ bool PNGReadPixels(png_structp png, png_infop info, void* pixels, unsigned width return false; } + if (png_get_bit_depth(png, info) == 16) { +#ifdef PNG_READ_SCALE_16_TO_8_SUPPORTED + png_set_scale_16(png); +#else + png_set_strip_16(png); +#endif + } + uint8_t* pixelData = pixels; unsigned pngHeight = png_get_image_height(png, info); if (height < pngHeight) { @@ -334,6 +342,14 @@ bool PNGReadPixelsA(png_structp png, png_infop info, void* pixels, unsigned widt return false; } + if (png_get_bit_depth(png, info) == 16) { +#ifdef PNG_READ_SCALE_16_TO_8_SUPPORTED + png_set_scale_16(png); +#else + png_set_strip_16(png); +#endif + } + uint8_t* pixelData = pixels; unsigned pngHeight = png_get_image_height(png, info); if (height < pngHeight) { @@ -389,6 +405,14 @@ bool PNGReadPixels8(png_structp png, png_infop info, void* pixels, unsigned widt return false; } + if (png_get_bit_depth(png, info) == 16) { +#ifdef PNG_READ_SCALE_16_TO_8_SUPPORTED + png_set_scale_16(png); +#else + png_set_strip_16(png); +#endif + } + uint8_t* pixelData = pixels; unsigned pngHeight = png_get_image_height(png, info); if (height < pngHeight) {