public ColorHistogram(int[] pixelsOrig)
{
int N = pixelsOrig.Length;
int[] pixelsCpy = (int[])pixelsOrig.Clone() ;// new int[N];
Array.Sort(pixelsCpy);
// count unique colors:
int k = -1; // current color index
int curColor = -1;
for (int i = 0; i < pixelsCpy.Length; i++)
{
if (pixelsCpy[i] != curColor)
{
k++;
curColor = pixelsCpy[i];
}
}
int nColors = k + 1;
// tabulate and count unique colors:
colorArray = new int[nColors];
countArray = new int[nColors];
k = -1; // current color index
curColor = -1;
for (int i = 0; i < pixelsCpy.Length; i++)
{
if (pixelsCpy[i] != curColor)
{ // new color
k++;
curColor = pixelsCpy[i];
colorArray[k] = curColor;
countArray[k] = 1;
}
else
{
countArray[k]++;
}
}
pixelsCpy = null;
GC.Collect();
}