mirror of
https://github.com/gbdev/rgbds.git
synced 2026-10-06 04:05:38 +00:00
Only sort generated palette colors by PLTE order for indexed PNG images
Non-indexed images can still have a PLTE chunk. We should use `sortRgb` instead of `sortIndexed` for them, since their pixels' colors may not all be present in the PLTE chunk and would be unsortable.
This commit is contained in:
1 parent
49b3f566b1
commit
f8a1da71c1
6 files changed
+11
-8
No files matched your search
+8
-1
@@ -390,7 +390,14 @@ static std::pair<std::vector<size_t>, std::vector<Palette>>
|
||||
// "Sort" colors in the generated palettes, see the man page for the flowchart
|
||||
if (options.palSpecType == Options::DMG) {
|
||||
sortGrayscale(palettes, image.colors.raw());
|
||||
} else if (!image.png.palette.empty()) {
|
||||
} else if (image.png.isIndexed) {
|
||||
// A PNG image using PNG_COLOR_TYPE_RGB (2) or PNG_COLOR_TYPE_RGBA (6) can still
|
||||
// contain a PLTE chunk. From the PNG spec: "If present, it provides a suggested set of
|
||||
// from 1 to 256 colors to which the truecolor image can be quantized if the viewer
|
||||
// cannot display truecolor directly." We only sort palette colors by the PLTE chunk's
|
||||
// color order if the image uses PNG_COLOR_TYPE_PALETTE (3), since that guarantees every
|
||||
// color used will also be in the embedded palette.
|
||||
assume(!image.png.palette.empty());
|
||||
warning(
|
||||
WARNING_EMBEDDED,
|
||||
"Sorting palette colors by PNG's embedded PLTE chunk without '-c/--colors embedded'"
|
||||
|
||||
Reference in new issue
Block a user