Number of colors in an image

Will McGugan news at NOwillmcguganSPAM.com
Fri Nov 26 19:48:08 CET 2004


Laszlo Zsolt Nagy wrote:
>   Hello,
> 
> How can I determine the number of colors used in an image? I tried to
> search on Google but I could figure out. I read the PIL handbook but I
> do not see how to do it. Can anyone help?

You may get a better response on how to do it in Python, but the 
following C++ code should be easy to translate if necessary. All it 
requires is a get pixel function.

int CImage::CountUsedColours() const
{
	if ( !IsValid() ) { Error( errImageInvalid ); return 0; }	
	
	const int TableSize= ( 256 * 256 * 256 ) / 8;

	byte CountTable[ TableSize ];
	memset( &CountTable[0], 0, TableSize );	
	
	for( int Y= 0; Y < GetHeight(); Y++ )
	{
		byte* pColour= (byte*)GetLinePointer( Y );
		int WidthCount= GetWidth();		

		while( WidthCount-- )
		{
			const CColour colPix= GetPixel( pColour );
			const int Offset= (int)colPix.R << 16 | (int)colPix.G << 8 | 
(int)colPix.B;
			CountTable[ Offset >> 3 ] |= 1 << ( Offset & 7 );
			pColour+= GetBPP();
		}

	}

	int ColourCount= 0;

	for( int n= 0; n < TableSize; n++ )
	{
		const int CountBits= CountTable[n];

		ColourCount+= ( CountBits & 1 );
		ColourCount+= ( CountBits >> 1 ) & 1;
		ColourCount+= ( CountBits >> 2 ) & 1;
		ColourCount+= ( CountBits >> 3 ) & 1;
		ColourCount+= ( CountBits >> 4 ) & 1;
		ColourCount+= ( CountBits >> 5 ) & 1;
		ColourCount+= ( CountBits >> 6 ) & 1;
		ColourCount+= ( CountBits >> 7 );						
	}

	OK();
	return ColourCount;
}


Regards,

Will McGugan



More information about the Python-list mailing list