-#if wxUSE_PALETTE
- png_colorp palette = NULL;
- int numPalette = 0;
-
- if (bUsePalette)
- {
- const wxPalette& pal = image->GetPalette();
- const int palCount = pal.GetColoursCount();
- palette = (png_colorp) malloc(
- (palCount + 1 /*headroom for trans */) * sizeof(png_color));
-
- if (!palette)
- {
- png_destroy_write_struct( &png_ptr, (png_infopp)NULL );
- if (verbose)
- {
- wxLogError(_("Couldn't save PNG image."));
- }
- return false;
- }
-
- for (int i = 0; i < palCount; ++i)
- {
- pal.GetRGB(i, &palette[i].red, &palette[i].green, &palette[i].blue);
- }
-
- numPalette = palCount;
- if (bHasMask)
- {
- int index = PaletteFind(mask, palette, numPalette);
-
- if (index)
- {
- if (index == wxNOT_FOUND)
- {
- numPalette++;
- index = palCount;
- palette[index] = mask;
- }
-
- wxSwap(palette[0], palette[index]);
- }
-
- png_byte trans = 0;
- png_set_tRNS(png_ptr, info_ptr, &trans, 1, NULL);
- }
-
- png_set_PLTE(png_ptr, info_ptr, palette, numPalette);
- free (palette);
- palette = NULL;
-
- // Let palette point to libpng's copy of the palette.
- (void) png_get_PLTE(png_ptr, info_ptr, &palette, &numPalette);
- }
-#endif // wxUSE_PALETTE
-