uGIF.NeuQuant.Map C# (CSharp) Method

Map() public method

public Map ( int b, int g, int r ) : int
b int
g int
r int
return int
        public int Map(int b, int g, int r)
        {
            int i, j, dist, a, bestd;
            int[] p;
            int best;

            bestd = 1000; /* biggest possible dist is 256*3 */
            best = -1;
            i = netindex [g]; /* index on g */
            j = i - 1; /* start at netindex[g] and work outwards */

            while ((i < netsize) || (j >= 0)) {
                if (i < netsize) {
                    p = network [i];
                    dist = p [1] - g; /* inx key */
                    if (dist >= bestd)
                        i = netsize; /* stop iter */
                    else {
                        i++;
                        if (dist < 0)
                            dist = -dist;
                        a = p [0] - b;
                        if (a < 0)
                            a = -a;
                        dist += a;
                        if (dist < bestd) {
                            a = p [2] - r;
                            if (a < 0)
                                a = -a;
                            dist += a;
                            if (dist < bestd) {
                                bestd = dist;
                                best = p [3];
                            }
                        }
                    }
                }
                if (j >= 0) {
                    p = network [j];
                    dist = g - p [1]; /* inx key - reverse dif */
                    if (dist >= bestd)
                        j = -1; /* stop iter */
                    else {
                        j--;
                        if (dist < 0)
                            dist = -dist;
                        a = p [0] - b;
                        if (a < 0)
                            a = -a;
                        dist += a;
                        if (dist < bestd) {
                            a = p [2] - r;
                            if (a < 0)
                                a = -a;
                            dist += a;
                            if (dist < bestd) {
                                bestd = dist;
                                best = p [3];
                            }
                        }
                    }
                }
            }
            return (best);
        }