Don't free the palette, it is owned by libpng.
Fixes #21. git-svn-id: svn://pulkomandy.tk/GrafX2/trunk@2118 416bcca6-2ee7-4201-b75f-2eb2f807beb1
This commit is contained in:
parent
705584a9d7
commit
d164d1d4cc
@ -4043,23 +4043,23 @@ void Load_PNG(T_IO_Context * context)
|
|||||||
}
|
}
|
||||||
else if (color_type == PNG_COLOR_TYPE_PALETTE) // Palette images
|
else if (color_type == PNG_COLOR_TYPE_PALETTE) // Palette images
|
||||||
{
|
{
|
||||||
|
|
||||||
if (bit_depth < 8)
|
if (bit_depth < 8)
|
||||||
{
|
{
|
||||||
// Clear unused colors
|
// Clear unused colors
|
||||||
if (Config.Clear_palette)
|
if (Config.Clear_palette)
|
||||||
memset(context->Palette,0,sizeof(T_Palette));
|
memset(context->Palette,0,sizeof(T_Palette));
|
||||||
}
|
}
|
||||||
// Load the palette
|
// Get a pointer to the PNG palette
|
||||||
png_get_PLTE(png_ptr, info_ptr, &palette,
|
png_get_PLTE(png_ptr, info_ptr, &palette,
|
||||||
&num_palette);
|
&num_palette);
|
||||||
|
// Copy all colors to the context
|
||||||
for (x=0;x<num_palette;x++)
|
for (x=0;x<num_palette;x++)
|
||||||
{
|
{
|
||||||
context->Palette[x].R=palette[x].red;
|
context->Palette[x].R=palette[x].red;
|
||||||
context->Palette[x].G=palette[x].green;
|
context->Palette[x].G=palette[x].green;
|
||||||
context->Palette[x].B=palette[x].blue;
|
context->Palette[x].B=palette[x].blue;
|
||||||
}
|
}
|
||||||
free(palette);
|
// The palette must not be freed: it is owned by libpng.
|
||||||
palette = NULL;
|
palette = NULL;
|
||||||
}
|
}
|
||||||
// Transparency (tRNS)
|
// Transparency (tRNS)
|
||||||
@ -4084,7 +4084,7 @@ void Load_PNG(T_IO_Context * context)
|
|||||||
// In this case, num_trans is supposed to be "1",
|
// In this case, num_trans is supposed to be "1",
|
||||||
// and trans_values[0] contains the reference color
|
// and trans_values[0] contains the reference color
|
||||||
// (RGB triplet) that counts as transparent.
|
// (RGB triplet) that counts as transparent.
|
||||||
|
|
||||||
// Ideally, we should reserve this color in the palette,
|
// Ideally, we should reserve this color in the palette,
|
||||||
// (so it's not merged and averaged with a neighbor one)
|
// (so it's not merged and averaged with a neighbor one)
|
||||||
// and after creating the optimized palette, find its
|
// and after creating the optimized palette, find its
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user