This is alphaim.c in view mode; [Download] [Up]
/* * AlphaImage () - creates an alpha channel * * RCS: * $Revision: 2.3 $ * $Date: 1996/05/03 02:21:34 $ * * Security: * Unclassified * * Description: * From ImageMagick * * Input Parameters: * type identifier description * * text * * Output Parameters: * type identifier description * * text * * Return Values: * value description * * Side Effects: * text * * Limitations and Comments: * text * * Development History: * who when why * muquit@semcor.com 24-Aug-95 first cut */ #include "combine.h" #if __STDC__ || defined(sgi) || defined(_AIX) void AlphaImage (Image *image, unsigned char red,unsigned char green,unsigned char blue) #else void AlphaImage (image,red,green,blue) Image *image; unsigned char red, green, blue; #endif { #define DeltaX 16 register Runlength *p; register int i; p=image->pixels; switch(image->class) { case DirectClass: { if (!image->alpha) { for (i=0; i < image->packets; i++) { p->index=Opaque; p++; } image->alpha=True; p=image->pixels; } for (i=0; i < image->packets; i++) { if (((int) p->red < (int) (red+DeltaX)) && ((int) p->red > (int) (red-DeltaX)) && ((int) p->green < (int) (green+DeltaX)) && ((int) p->green > (int) (green-DeltaX)) && ((int) p->blue < (int) (blue+DeltaX)) && ((int) p->blue > (int) (blue-DeltaX))) p->index=Transparent; p++; } break; } case PseudoClass: { double distance_squared, min_distance; int distance; register int index; min_distance=3.0*(MaxRGB+1)*(MaxRGB+1); index=0; for (i=0; i < image->colors; i++) { distance=(int) red-(int) image->colormap[i].red; distance_squared=(unsigned int) (distance*distance); distance=(int) green-(int) image->colormap[i].green; distance_squared+=(unsigned int) (distance*distance); distance=(int) blue-(int) image->colormap[i].blue; distance_squared+=(unsigned int) (distance*distance); if (distance_squared < min_distance) { min_distance=distance_squared; index=i; } } image->class=DirectClass; image->alpha=True; for (i=0; i < image->packets; i++) { if (p->index == index) p->index=Transparent; else p->index=Opaque; p++; } break; } } }
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.