+    unsigned char * rgbBits = image.GetData();
+    int w = image.GetWidth() ;
+    int h = image.GetHeight();
+    bool bHasMask = image.HasMask();
+    int imagebitcount = (w*h)/8;
+
+    unsigned char * bits = new unsigned char [imagebitcount];
+    unsigned char * maskBits = new unsigned char [imagebitcount];
+
+    int i, j, i8; unsigned char c, cMask;
+    for (i=0; i<imagebitcount; i++)
+    {
+        bits[i] = 0;
+        i8 = i * 8;
+
+        cMask = 1;
+        for (j=0; j<8; j++)
+        {
+            // possible overflow if we do the summation first ?
+            c = rgbBits[(i8+j)*3]/3 + rgbBits[(i8+j)*3+1]/3 + rgbBits[(i8+j)*3+2]/3;
+            //if average value is > mid grey
+            if (c>127)
+                bits[i] = bits[i] | cMask;
+            cMask = cMask * 2;
+        }
+    }
+
+    unsigned long keyMaskColor;
+    if (bHasMask)
+    {
+        unsigned char
+            r = image.GetMaskRed(),
+            g = image.GetMaskGreen(),
+            b = image.GetMaskBlue();
+
+        for (i=0; i<imagebitcount; i++)
+        {
+            maskBits[i] = 0x0;
+            i8 = i * 8;
+
+            cMask = 1;
+            for (j=0; j<8; j++)
+            {
+                if (rgbBits[(i8+j)*3] != r || rgbBits[(i8+j)*3+1] != g || rgbBits[(i8+j)*3+2] != b)
+                    maskBits[i] = maskBits[i] | cMask;
+                cMask = cMask * 2;
+            }
+        }
+
+        keyMaskColor = (r << 16) | (g << 8) | b;
+    }
+    else // no mask
+    {
+        for (i=0; i<imagebitcount; i++)
+            maskBits[i] = 0xFF;
+
+        // init it to avoid compiler warnings
+        keyMaskColor = 0;
+    }
+
+    // find the most frequent color(s) it seems a waste of effort to copy the
+    // image but otherwise we need to remove the const modifier ??
+    wxImage tmpImage = image.Copy();
+    wxImageHistogram histogram;
+
+    // colors as rrggbb
+    unsigned long key;
+    unsigned long value;
+
+    tmpImage.ComputeHistogram(histogram);
+
+    long MostFreqCol = 0;
+    unsigned long nMost = 0;
+    long NextFreqCol = 0;
+    unsigned long nNext = 0;
+    wxImageHistogram::iterator entry = histogram.begin();