changed wxImage::ComputeHistogram to use wxHashMap

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@14056 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Václav Slavík
2002-02-07 18:11:39 +00:00
parent d353bd452e
commit 952ae1e88b
6 changed files with 100 additions and 120 deletions

View File

@@ -140,25 +140,23 @@ bool wxXPMHandler::SaveFile(wxImage * image,
stream.Write(tmpbuf, strlen(tmpbuf));
// 3. create color symbols table:
wxHashTable table(wxKEY_INTEGER);
image->ComputeHistogram(table);
wxImageHistogram histogram;
image->ComputeHistogram(histogram);
char *symbols_data = new char[cols * (chars_per_pixel+1)];
char **symbols = new char*[cols];
// 2a. find mask colour:
long mask_key = -1;
unsigned long mask_key = 0x1000000 /*invalid RGB value*/;
if (image->HasMask())
mask_key = (image->GetMaskRed() << 16) |
(image->GetMaskGreen() << 8) | image->GetMaskBlue();
// 2b. generate colour table:
table.BeginFind();
wxNode *node = NULL;
while ((node = table.Next()) != NULL)
for (wxImageHistogram::iterator entry = histogram.begin();
entry != histogram.end(); entry++ )
{
wxHNode *hnode = (wxHNode*) node->GetData();
long index = hnode->index;
unsigned long index = entry->second.index;
symbols[index] = symbols_data + index * (chars_per_pixel+1);
char *sym = symbols[index];
@@ -171,7 +169,7 @@ bool wxXPMHandler::SaveFile(wxImage * image,
}
sym[j] = '\0';
long key = node->GetKeyInteger();
unsigned long key = entry->first;
if (key == 0)
tmp.Printf(wxT("\"%s c Black\",\n"), sym);
@@ -195,8 +193,7 @@ bool wxXPMHandler::SaveFile(wxImage * image,
for (i = 0; i < image->GetWidth(); i++, data += 3)
{
unsigned long key = (data[0] << 16) | (data[1] << 8) | (data[2]);
wxHNode *hnode = (wxHNode*) table.Get(key);
stream.Write(symbols[hnode->index], chars_per_pixel);
stream.Write(symbols[histogram[key].index], chars_per_pixel);
}
tmp_c = '\"'; stream.Write(&tmp_c, 1);
if ( j + 1 < image->GetHeight() )
@@ -212,13 +209,6 @@ bool wxXPMHandler::SaveFile(wxImage * image,
delete[] symbols;
delete[] symbols_data;
// FIXME: it will be better to use macros-based wxHashTable & DeleteContents(TRUE)
table.BeginFind();
while ((node = table.Next()) != NULL)
{
delete (wxHNode *) node->GetData();
}
return TRUE;
}