Added CountColours()
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@4957 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -390,6 +390,7 @@ public:
|
|||||||
static void InitStandardHandlers();
|
static void InitStandardHandlers();
|
||||||
|
|
||||||
// GRG: Dic/99
|
// GRG: Dic/99
|
||||||
|
unsigned long CountColours( unsigned long stopat = -1 );
|
||||||
unsigned long ComputeHistogram( wxHashTable &h );
|
unsigned long ComputeHistogram( wxHashTable &h );
|
||||||
|
|
||||||
|
|
||||||
|
@@ -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
|
// GRG, Dic/99
|
||||||
// Computes the histogram of the image and fills a hash table, indexed
|
// Computes the histogram of the image and fills a hash table, indexed
|
||||||
// with integer keys built as 0xRRGGBB, containing wxHNode objects. Each
|
// with integer keys built as 0xRRGGBB, containing wxHNode objects. Each
|
||||||
// wxHNode contains an 'index' (useful to build a palette with the image
|
// 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
|
// colours) and a 'value', which is the number of pixels in the image with
|
||||||
// that colour.
|
// that colour.
|
||||||
|
//
|
||||||
unsigned long wxImage::ComputeHistogram( wxHashTable &h )
|
unsigned long wxImage::ComputeHistogram( wxHashTable &h )
|
||||||
{
|
{
|
||||||
unsigned char r, g, b, *p;
|
unsigned char r, g, b, *p;
|
||||||
|
Reference in New Issue
Block a user