6#define LOOKUP_COLORS 2048
8static void organize_lookup(
struct Colors *,
int);
9static int organize_fp_lookup(
struct Colors *,
int);
10static int double_comp(
const void *,
const void *);
18 organize_lookup(colors, 0);
19 organize_lookup(colors, 1);
21 organize_fp_lookup(colors, 0);
22 organize_fp_lookup(colors, 1);
28static int organize_fp_lookup(
struct Colors *colors,
int mod)
41 if (
cp->lookup.active ||
cp->fp_lookup.active)
63 for (rule =
cp->rules; rule->
next; rule = rule->
next)
66 for (; rule; rule = rule->
prev) {
68 if (i == 0 || rule->low.value !=
cp->fp_lookup.vals[i - 1])
69 cp->fp_lookup.vals[i++] = rule->low.value;
70 cp->fp_lookup.vals[i++] = rule->
high.value;
72 cp->fp_lookup.nalloc = i;
75 qsort((
char *)
cp->fp_lookup.vals,
cp->fp_lookup.nalloc,
sizeof(
DCELL),
79 for (i = 0; i <
cp->fp_lookup.nalloc - 1; i++) {
80 val = (
cp->fp_lookup.vals[i] +
cp->fp_lookup.vals[i + 1]) / 2.;
84 for (rule =
cp->rules; rule; rule = rule->
next)
90 cp->fp_lookup.rules[i] = rule;
92 cp->fp_lookup.active = 1;
97static void organize_lookup(
struct Colors *colors,
int mod)
113 if (
cp->lookup.active)
121 for (i = 0; i < n; i++)
125 cp->lookup.nalloc = n;
126 cp->lookup.red = (
unsigned char *)
G_malloc(n);
127 cp->lookup.grn = (
unsigned char *)
G_malloc(n);
128 cp->lookup.blu = (
unsigned char *)
G_malloc(n);
129 cp->lookup.set = (
unsigned char *)
G_malloc(n);
131 G_zero(
cp->lookup.set, n *
sizeof(
unsigned char));
133 cp->lookup.blu,
cp->lookup.set, n, colors,
mod, 1,
136 cp->lookup.active = 1;
139static int double_comp(
const void *
xx,
const void *
yy)
void Rast__organize_colors(struct Colors *colors)
void G_zero(void *, int)
Zero out a buffer, buf, of length i.
void Rast__lookup_colors(const void *, unsigned char *, unsigned char *, unsigned char *, unsigned char *, int, struct Colors *, int, int, RASTER_MAP_TYPE)
Lookup an array of colors.
struct _Color_Info_ fixed
struct _Color_Info_ modular
struct _Color_Rule_ * prev
struct _Color_Rule_ * next
struct _Color_Value_ low high