X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/c96ea65713a8dd58ae40b10718723b5c92a303e3..0fe5e8fea017ecb73f8aaa8ceb745feb269b3f79:/src/common/imagpcx.cpp diff --git a/src/common/imagpcx.cpp b/src/common/imagpcx.cpp index d03735e4c5..2e50e2c5a5 100644 --- a/src/common/imagpcx.cpp +++ b/src/common/imagpcx.cpp @@ -102,7 +102,7 @@ void RLEdecode(unsigned char *p, unsigned int size, wxInputStream& s) // if ((data & 0xC0) != 0xC0) { - *(p++) = data; + *(p++) = (unsigned char)data; size--; } else @@ -110,7 +110,7 @@ void RLEdecode(unsigned char *p, unsigned int size, wxInputStream& s) cont = data & 0x3F; data = (unsigned char)s.GetC(); for (i = 1; i <= cont; i++) - *(p++) = data; + *(p++) = (unsigned char)data; size -= cont; } } @@ -277,9 +277,10 @@ int ReadPCX(wxImage *image, wxInputStream& stream) *(p++) = pal[3 * index + 2]; } - unsigned char* r = new unsigned char[256]; - unsigned char* g = new unsigned char[256]; - unsigned char* b = new unsigned char[256]; +#if wxUSE_PALETTE + unsigned char r[256]; + unsigned char g[256]; + unsigned char b[256]; for (i = 0; i < 256; i++) { r[i] = pal[3*i + 0]; @@ -287,7 +288,7 @@ int ReadPCX(wxImage *image, wxInputStream& stream) b[i] = pal[3*i + 2]; } image->SetPalette(wxPalette(256, r, g, b)); - delete[] r; delete[] g; delete[] b; +#endif // wxUSE_PALETTE } return wxPCX_OK; @@ -310,7 +311,7 @@ int SavePCX(wxImage *image, wxOutputStream& stream) unsigned int bytesperline; // bytes per line (each plane) int nplanes = 3; // number of planes int format = wxPCX_24BIT; // image format (8 bit, 24 bit) - wxHashTable h(wxKEY_INTEGER); // image histogram + wxImageHistogram histogram; // image histogram unsigned long key; // key in the hashtable unsigned int i; @@ -318,7 +319,7 @@ int SavePCX(wxImage *image, wxOutputStream& stream) if (image->CountColours(256) <= 256) { - image->ComputeHistogram(h); + image->ComputeHistogram(histogram); format = wxPCX_8BIT; nplanes = 1; } @@ -349,12 +350,12 @@ int SavePCX(wxImage *image, wxOutputStream& stream) hdr[HDR_ENCODING] = 1; hdr[HDR_NPLANES] = nplanes; hdr[HDR_BITSPERPIXEL] = 8; - hdr[HDR_BYTESPERLINE] = bytesperline % 256; - hdr[HDR_BYTESPERLINE + 1] = bytesperline / 256; - hdr[HDR_XMAX] = (width - 1) % 256; - hdr[HDR_XMAX + 1] = (width - 1) / 256; - hdr[HDR_YMAX] = (height - 1) % 256; - hdr[HDR_YMAX + 1] = (height - 1) / 256; + hdr[HDR_BYTESPERLINE] = (unsigned char)(bytesperline % 256); + hdr[HDR_BYTESPERLINE + 1] = (unsigned char)(bytesperline / 256); + hdr[HDR_XMAX] = (unsigned char)((width - 1) % 256); + hdr[HDR_XMAX + 1] = (unsigned char)((width - 1) / 256); + hdr[HDR_YMAX] = (unsigned char)((height - 1) % 256); + hdr[HDR_YMAX + 1] = (unsigned char)((height - 1) / 256); hdr[HDR_PALETTEINFO] = 1; stream.Write(hdr, 128); @@ -370,7 +371,6 @@ int SavePCX(wxImage *image, wxOutputStream& stream) case wxPCX_8BIT: { unsigned char r, g, b; - wxHNode *hnode; for (i = 0; i < width; i++) { @@ -379,8 +379,7 @@ int SavePCX(wxImage *image, wxOutputStream& stream) b = *(src++); key = (r << 16) | (g << 8) | b; - hnode = (wxHNode *) h.Get(key); - p[i] = (unsigned char)hnode->index; + p[i] = (unsigned char)histogram[key].index; } break; } @@ -401,26 +400,22 @@ int SavePCX(wxImage *image, wxOutputStream& stream) free(p); - // For 8 bit images, build the palette and write it to the stream - + // For 8 bit images, build the palette and write it to the stream: if (format == wxPCX_8BIT) { - wxNode *node; - wxHNode *hnode; - // zero unused colours memset(pal, 0, sizeof(pal)); - h.BeginFind(); - while ((node = h.Next()) != NULL) + unsigned long index; + + for (wxImageHistogram::iterator entry = histogram.begin(); + entry != histogram.end(); entry++ ) { - key = node->GetKeyInteger(); - hnode = (wxHNode *) node->GetData(); - - pal[3 * hnode->index] = (unsigned char)(key >> 16); - pal[3 * hnode->index + 1] = (unsigned char)(key >> 8); - pal[3 * hnode->index + 2] = (unsigned char)(key); - delete hnode; + key = entry->first; + index = entry->second.index; + pal[3 * index] = (unsigned char)(key >> 16); + pal[3 * index + 1] = (unsigned char)(key >> 8); + pal[3 * index + 2] = (unsigned char)(key); } stream.PutC(12);