请教怎么统计一个彩色图片中所有出现过不同的颜色个数和每个不同颜色在原始图像中的个数

请问如何统计一个彩色图片中所有出现过不同的颜色个数和每个不同颜色在原始图像中的个数,
我已经得到了图像的数据数组m*n*3
现在想统计下图像中所有不同的颜色个数及对应的总像素个数,有什么快速的方法吗?

------解决方案--------------------
24位RGB的最大值是0XFFFFFF=16M
定义一个16M的数组,这样的话每一个颜色值对应数组中唯一的一个元素
------解决方案--------------------

std::map <COLORREF ,int> map;
for( long i = 0;i <m;i++)
{
for( long j=0;j <n;j++)
{
std::map <COLORREF ,int> ::iterator it = map.find( color );
if( it !=map.end() )
{
it-> second =it-> second + 1;
}else
{
map[color] = 1;
}
}
}