ScreenToGif.Encoding.NeuQuant.Contest C# (CSharp) Method

Contest() private method

Search for biased BGR values.
private Contest ( int b, int g, int r ) : int
b int Blue
g int Green
r int Red
return int
        private int Contest(int b, int g, int r)
        {
            /* Finds closest neuron (minimum distance) and updates freq */
            /* Finds best neuron (min dist-bias) and returns position */
            /* For frequently chosen neurons, _freq[i] is high and _bias[i] is negative */
            /* _bias[i] = gamma*((1/netsize)-_freq[i]) */

            int bestD = ~(1 << 31); //Bitwise inverted.
            int bestBiasD = bestD;
            int bestPos = -1;
            int bestBiasPos = bestPos;

            for (int i = 0; i < Netsize; i++)
            {
                int dist = _network[i][0] - b;

                if (dist < 0)
                    dist = -dist;

                int a = _network[i][1] - g;

                if (a < 0)
                    a = -a;

                dist += a;
                a = _network[i][2] - r;

                if (a < 0)
                    a = -a;

                dist += a;

                if (dist < bestD)
                {
                    bestD = dist;
                    bestPos = i;
                }

                int biasdist = dist - (_bias[i] >> (IntBiasShift - Netbiasshift));

                if (biasdist < bestBiasD)
                {
                    bestBiasD = biasdist;
                    bestBiasPos = i;
                }

                int betafreq = (_freq[i] >> BetaShift);
                _freq[i] -= betafreq;
                _bias[i] += (betafreq << GammaShift);
            }

            _freq[bestPos] += Beta;
            _bias[bestPos] -= BetaGamma;

            return bestBiasPos;
        }
    }