]> git.saurik.com Git - wxWidgets.git/commitdiff
Added ComputeHistogram
authorGuillermo Rodriguez Garcia <guille@iies.es>
Wed, 15 Dec 1999 11:45:32 +0000 (11:45 +0000)
committerGuillermo Rodriguez Garcia <guille@iies.es>
Wed, 15 Dec 1999 11:45:32 +0000 (11:45 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@4955 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/image.h
src/common/image.cpp

index cbff996d7595a5d96c78bf5defdc04e29aef0462..04c131e040d4350dd0798ece799fe47de03b4a6e 100644 (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;
index 1eaadf02e212d71bc4d5dab7861ecce5548790b2..725cff015c7b671f2566fac07c9152db27bf7c84 100644 (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;
+}
+
+