Возникла проблема при попытке преобразовать 8-битный PNG в 32-битный PNG с использованием libpng.
Я установил png_set_palette_to_rgb (png) и вызвал png_read_update_info. Однако изображение не отображается должным образом, т.е. я получаю полупрозрачное изображение, однако цвет изображения каким-то образом изменяется.
Я использовал следующий код.
png_structp png = png_create_read_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
if (!png) abort();
png_infop info = png_create_info_struct(png);
if (!info) abort();
if (setjmp(png_jmpbuf(png))) abort();
png_init_io(png, fp);
png_read_info(png, info);
width_ = png_get_image_width(png, info);
height_ = png_get_image_height(png, info);
color_type_ = png_get_color_type(png, info);
bit_depth_ = png_get_bit_depth(png, info);
// Read any color_type into 8bit depth, RGBA format.
// See http://www.libpng.org/pub/png/libpng-manual.txt
if (bit_depth_ == 16)
png_set_strip_16(png);
if (color_type_ == PNG_COLOR_TYPE_PALETTE)
png_set_palette_to_rgb(png);
if (png_get_valid(png, info, PNG_INFO_tRNS))
png_set_tRNS_to_alpha(png);
// These color_type don't have an alpha channel then fill it with 0xff.
if (color_type_ == PNG_COLOR_TYPE_RGB ||
color_type_ == PNG_COLOR_TYPE_GRAY ||
color_type_ == PNG_COLOR_TYPE_PALETTE)
png_set_filler(png, 0xFF, PNG_FILLER_AFTER);
if (color_type_ == PNG_COLOR_TYPE_GRAY ||
color_type_ == PNG_COLOR_TYPE_GRAY_ALPHA)
png_set_gray_to_rgb(png);
png_read_update_info(png, info);