This is compcmap.c in view mode; [Download] [Up]
/* %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % % % % % % C o m p r e s s C o l o r m a p % % % % % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % Function CompressColormap compresses an image colormap removing any % unused color entries. % % The format of the CompressColormap routine is: % % CompressColormap(image) % % A description of each parameter follows: % % o image: The address of a structure of type Image. % % */ #include "combine.h" #include "defines.h" void CompressColormap(image) Image *image; { RGB *colormap; int number_colors; register int i; register Runlength *p; register unsigned short index; /* Determine if colormap can be compressed. */ if (image->class != PseudoClass) return; number_colors=image->colors; for (i=0; i < image->colors; i++) image->colormap[i].flags=False; image->colors=0; p=image->pixels; for (i=0; i < image->packets; i++) { if (!image->colormap[p->index].flags) { image->colormap[p->index].index=image->colors; image->colormap[p->index].flags=True; image->colors++; } p++; } if (image->colors == number_colors) return; /* no unused entries */ /* Compress colormap. */ colormap=(RGB *) malloc(image->colors*sizeof(RGB)); if (colormap == (RGB *) NULL) { (void) fprintf (stderr, "Unable to compress colormap,Memory allocation error\n"); image->colors=number_colors; return; } for (i=0; i < number_colors; i++) if (image->colormap[i].flags) { index=image->colormap[i].index; colormap[index].red=image->colormap[i].red; colormap[index].green=image->colormap[i].green; colormap[index].blue=image->colormap[i].blue; } /* Remap pixels. */ p=image->pixels; for (i=0; i < image->packets; i++) { p->index=image->colormap[p->index].index; p++; } (void) free((char *) image->colormap); image->colormap=colormap; }
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.