From c9d01afd8237e2a63c11f5ef4050d57a8651b2db Mon Sep 17 00:00:00 2001 From: Guillermo Rodriguez Garcia Date: Wed, 15 Dec 1999 11:45:32 +0000 Subject: [PATCH] Added ComputeHistogram git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@4955 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/image.h | 14 ++++++++++++++ src/common/image.cpp | 46 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 60 insertions(+) diff --git a/include/wx/image.h b/include/wx/image.h index cbff996d75..04c131e040 100644 --- a/include/wx/image.h +++ b/include/wx/image.h @@ -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; diff --git a/src/common/image.cpp b/src/common/image.cpp index 1eaadf02e2..725cff015c 100644 --- a/src/common/image.cpp +++ b/src/common/image.cpp @@ -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; +} + + -- 2.45.2