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

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

index 04c131e040d4350dd0798ece799fe47de03b4a6e..c590788ad879c7aa76cb0ce1ba7c821e0e0bf9ef 100644 (file)
@@ -390,6 +390,7 @@ public:
   static void InitStandardHandlers();
 
   // GRG: Dic/99
+  unsigned long CountColours( unsigned long stopat = -1 );
   unsigned long ComputeHistogram( wxHashTable &h );
 
 
index 725cff015c7b671f2566fac07c9152db27bf7c84..4a7a6a4a1a6f052391cbcd0544c99cac8ffbf9ad 100644 (file)
@@ -2301,13 +2301,57 @@ IMPLEMENT_DYNAMIC_CLASS(wxImageModule, wxModule)
 
 //-----------------------------------------------------------------------------
 
+// GRG, Dic/99
+// Counts and returns the number of different colours. Optionally stops
+// when it reaches 'stopat' different colours. This is useful, for example,
+// to see if the image can be saved as 8-bit (256 colour or less, in this
+// case it would be invoked as CountColours(257)). Default value for stopat
+// is -1 (don't care).
+//
+unsigned long wxImage::CountColours( unsigned long stopat )
+{
+    wxHashTable h;
+    wxNode *node;
+    wxHNode *hnode;
+    unsigned char r, g, b, *p;
+    unsigned long size, nentries, key;
+
+    p = GetData();
+    size = GetWidth() * GetHeight();
+    nentries = 0;
+
+    for (unsigned long j = 0; (j < size) && (nentries < stopat) ; j++)
+    {
+        r = *(p++);
+        g = *(p++);
+        b = *(p++);
+        key = (r << 16) | (g << 8) | b;
+
+        hnode = (wxHNode *) h.Get(key);
+
+        if (!hnode)
+        {
+            h.Put(key, (wxObject *)(new wxHNode));
+            nentries++;
+        }
+    }
+
+    // delete all HNodes
+    h.BeginFind();
+    while ((node = h.Next()) != NULL)
+        delete (wxHNode *)node->GetData();
+
+    return nentries;
+}
+
+
 // 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;