[ 1558691 ] wxPNGHandler: Preserve palette
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@41267 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -37,6 +37,7 @@
|
|||||||
#include "wx/filefn.h"
|
#include "wx/filefn.h"
|
||||||
#include "wx/wfstream.h"
|
#include "wx/wfstream.h"
|
||||||
#include "wx/intl.h"
|
#include "wx/intl.h"
|
||||||
|
#include "wx/palette.h"
|
||||||
|
|
||||||
// For memcpy
|
// For memcpy
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
@@ -580,6 +581,29 @@ wxPNGHandler::LoadFile(wxImage *image,
|
|||||||
|
|
||||||
png_read_image( png_ptr, lines );
|
png_read_image( png_ptr, lines );
|
||||||
png_read_end( png_ptr, info_ptr );
|
png_read_end( png_ptr, info_ptr );
|
||||||
|
|
||||||
|
#if wxUSE_PALETTE
|
||||||
|
if (color_type == PNG_COLOR_TYPE_PALETTE)
|
||||||
|
{
|
||||||
|
const size_t ncolors = info_ptr->num_palette;
|
||||||
|
unsigned char* r = new unsigned char[ncolors];
|
||||||
|
unsigned char* g = new unsigned char[ncolors];
|
||||||
|
unsigned char* b = new unsigned char[ncolors];
|
||||||
|
|
||||||
|
for (size_t j = 0; j < ncolors; j++)
|
||||||
|
{
|
||||||
|
r[j] = info_ptr->palette[j].red;
|
||||||
|
g[j] = info_ptr->palette[j].green;
|
||||||
|
b[j] = info_ptr->palette[j].blue;
|
||||||
|
}
|
||||||
|
|
||||||
|
image->SetPalette(wxPalette(ncolors, r, g, b));
|
||||||
|
delete[] r;
|
||||||
|
delete[] g;
|
||||||
|
delete[] b;
|
||||||
|
}
|
||||||
|
#endif // wxUSE_PALETTE
|
||||||
|
|
||||||
png_destroy_read_struct( &png_ptr, &info_ptr, (png_infopp) NULL );
|
png_destroy_read_struct( &png_ptr, &info_ptr, (png_infopp) NULL );
|
||||||
|
|
||||||
// loaded successfully, now init wxImage with this data
|
// loaded successfully, now init wxImage with this data
|
||||||
|
Reference in New Issue
Block a user