Added ComputeHistogram

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@4955 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Guillermo Rodriguez Garcia
1999-12-15 11:45:32 +00:00
parent 97507ccea7
commit c9d01afd82
2 changed files with 60 additions and 0 deletions

View File

@@ -282,6 +282,16 @@ public:
// wxImage
//-----------------------------------------------------------------------------
// GRG: Dic/99
class WXDLLEXPORT wxHNode
{
public:
unsigned long index;
unsigned long value;
};
class WXDLLEXPORT wxImage: public wxObject
{
DECLARE_DYNAMIC_CLASS(wxImage)
@@ -379,6 +389,10 @@ public:
static void CleanUpHandlers();
static void InitStandardHandlers();
// GRG: Dic/99
unsigned long ComputeHistogram( wxHashTable &h );
protected:
static wxList sm_handlers;

View File

@@ -2297,3 +2297,49 @@ public:
};
IMPLEMENT_DYNAMIC_CLASS(wxImageModule, wxModule)
//-----------------------------------------------------------------------------
// GRG, Dic/99
// Computes the histogram of the image and fills a hash table, indexed
// with integer keys built as 0xRRGGBB, containing wxHNode objects. Each
// wxHNode contains an 'index' (useful to build a palette with the image
// colours) and a 'value', which is the number of pixels in the image with
// that colour.
unsigned long wxImage::ComputeHistogram( wxHashTable &h )
{
unsigned char r, g, b, *p;
unsigned long size, nentries, key;
wxHNode *hnode;
p = GetData();
size = GetWidth() * GetHeight();
nentries = 0;
for (unsigned long j = 0; j < size; j++)
{
r = *(p++);
g = *(p++);
b = *(p++);
key = (r << 16) | (g << 8) | b;
hnode = (wxHNode *) h.Get(key);
if (hnode)
hnode->value++;
else
{
hnode = new wxHNode();
hnode->index = nentries++;
hnode->value = 1;
h.Put(key, (wxObject *)hnode);
}
}
return nentries;
}