home *** CD-ROM | disk | FTP | other *** search
- /*
- ** Part 4
- */
-
- #include <stdio.h>
-
- int **diff = NULL;
- int intensity [16][16][16];
-
- /* Prepare to call rgberr */
- initrgberr ()
- {
- char *calloc ();
- int i, j;
- int r, g, b;
-
- /* Setup squares of differences lookup table */
- diff = (int **) calloc (16, sizeof (int *));
- if (diff == NULL)
- fatalerr ("Out of memory");
- for (i = 0; i < 16; i++) {
- diff [i] = (int *) calloc (16, sizeof (int));
- if (diff [i] == NULL)
- fatalerr ("Out of memory");
- for (j = 0; j < 16; j++)
- diff [i][j] = (i - j) * (i - j);
- }
-
- /* Setup intensity table */
- for (r = 0; r < 16; r++)
- for (g = 0; g < 16; g++)
- for (b = 0; b < 16; b++)
- intensity [r][g][b] = (3 * r + 6 * g + b) * 15 / 150;
- }
-
- /* Finish calling rgberr */
- freergberr ()
- {
- int i;
-
- if (diff != NULL) {
- for (i = 0; i < 16; i++)
- free (diff [i]);
- free (diff);
- diff = NULL;
- }
- }
-
- /* Evaluates 'distance' between 2 colours */
- rgberr (r1, g1, b1, r2, g2, b2)
- {
- return (diff [intensity [r1][g1][b1]][intensity [r2][g2][b2]] +
- diff [r1][r2] +
- diff [g1][g2] +
- diff [b1][b2]);
- }
-
-