Fix saving RGBA images

PNG_FORMAT_RGB and PNG_COLOR_TYPE_RGB both evaluate to 2, but PNG_FORMAT_RGBA evaluates to 3 while PNG_COLOR_TYPE_RGBA evaluates to 6; the bit indicating a palette is 1 while the bit indicating alpha is 4.
This commit is contained in:
Pokechu22
2021-11-24 14:39:07 -08:00
parent 99e589cc98
commit 8cf841ecc7
3 changed files with 8 additions and 7 deletions

View File

@ -68,18 +68,19 @@ bool SavePNG(const std::string& path, const u8* input, ImageByteFormat format, u
timer.Start();
size_t byte_per_pixel;
int png_format;
int color_type;
switch (format)
{
case ImageByteFormat::RGB:
png_format = PNG_FORMAT_RGB;
color_type = PNG_COLOR_TYPE_RGB;
byte_per_pixel = 3;
break;
case ImageByteFormat::RGBA:
png_format = PNG_FORMAT_RGBA;
color_type = PNG_COLOR_TYPE_RGBA;
byte_per_pixel = 4;
break;
default:
ASSERT_MSG(FRAMEDUMP, false, "Invalid format %d", static_cast<int>(format));
return false;
}
@ -110,7 +111,7 @@ bool SavePNG(const std::string& path, const u8* input, ImageByteFormat format, u
bool success = false;
if (png_ptr != nullptr && info_ptr != nullptr)
{
success = SavePNG0(png_ptr, info_ptr, png_format, width, height, level, &buffer, WriteCallback,
success = SavePNG0(png_ptr, info_ptr, color_type, width, height, level, &buffer, WriteCallback,
const_cast<u8**>(rows.data()));
}
png_destroy_write_struct(&png_ptr, &info_ptr);