diff --git a/winpr/libwinpr/utils/image.c b/winpr/libwinpr/utils/image.c index 770881480..09fca602e 100644 --- a/winpr/libwinpr/utils/image.c +++ b/winpr/libwinpr/utils/image.c @@ -940,14 +940,15 @@ static void* winpr_read_png_from_buffer(const void* data, size_t SrcSize, size_t NULL, NULL) != 1) goto fail; - size_t bpp = PNG_IMAGE_PIXEL_SIZE(color_type); + const png_byte channelcount = png_get_channels(png_ptr, info_ptr); + const size_t bpp = channelcount * bit_depth; row_pointers = png_get_rows(png_ptr, info_ptr); if (row_pointers) { - const size_t stride = width * bpp; + const size_t stride = width * bpp / 8ull; const size_t png_stride = png_get_rowbytes(png_ptr, info_ptr); - const size_t size = width * height * bpp; + const size_t size = width * height * bpp / 8ull; const size_t copybytes = stride > png_stride ? png_stride : stride; rc = malloc(size); @@ -962,7 +963,7 @@ static void* winpr_read_png_from_buffer(const void* data, size_t SrcSize, size_t *pSize = size; *pWidth = width; *pHeight = height; - *pBpp = bpp * 8; + *pBpp = bpp; } } fail: