ftp.nice.ch/pub/next/unix/network/www/wwwcount.2.3.NIHS.bs.tar.gz#/wwwcount2.3/combine/opaqim.c

This is opaqim.c in view mode; [Download] [Up]

/*
 *  OpaqueImage () - changes the color of an opaque pixel to the asked color
 *
 *  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   19-Feb-96   first cut
 */
#include "combine.h"

#if __STDC__ || defined(sgi) || defined(_AIX)
void OpaqueImage (Image *image,
    unsigned char sred,unsigned char sgreen,unsigned char sblue,
    unsigned char pred,unsigned char pgreen,unsigned char pblue)
#else
void OpaqueImage (image,sred,sgreen,sblue,pred,pgreen,pblue)
Image
    *image;
unsigned char
    sred,
    sgreen,
    sblue;
unsigned char
    pred,
    pgreen,
    pblue;
#endif
{
#define DeltaX  16

    register Runlength
        *p;

    register int
        i;

    p=image->pixels;
    switch(image->class)
    {
        case DirectClass:
        {
            for (i=0; i < image->packets; i++)
            {
                if (((int) p->red < (int) (sred+DeltaX)) &&
                    ((int) p->red > (int) (sred-DeltaX)) &&
                    ((int) p->green < (int) (sgreen+DeltaX)) &&
                    ((int) p->green > (int) (sgreen-DeltaX)) &&
                    ((int) p->blue < (int) (sblue+DeltaX)) &&
                    ((int) p->blue > (int) (sblue-DeltaX)))
                {
                    p->red=pred;
                    p->green=pgreen;
                    p->blue=pblue;
                }
               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) sred-(int) image->colormap[i].red;
                distance_squared=(unsigned int) (distance*distance);
                distance=(int) sgreen-(int) image->colormap[i].green;
                distance_squared+=(unsigned int) (distance*distance);
                distance=(int) sblue-(int) image->colormap[i].blue;
                distance_squared+=(unsigned int) (distance*distance);
                if (distance_squared < min_distance)
                {
                    min_distance=distance_squared;
                    index=i;
                }
             }

             image->colormap[index].red=pred;
             image->colormap[index].green=pgreen;
             image->colormap[index].blue=pblue;
             break;
        }
    }
}

These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.