#include <Quickdraw.h>#include "PixelTools.h"void InvertJRGB( JRGBColor *theColor ){	theColor->red = ~theColor->red;	theColor->green = ~theColor->green;	theColor->blue = ~theColor->blue;}void InvertPixel( PixMapHandle thePixMap, short x, short y ){	if( ((*thePixMap)->pixelSize > 8)&&((*thePixMap)->pixelType == 16) )	{		int pixelsize = ((*thePixMap)->pixelSize/8);		int rowsize=pixelsize*((*thePixMap)->bounds.right-(*thePixMap)->bounds.left);		void *pixeladdr = (pixelsize*x)+(y*rowsize)+(*thePixMap)->baseAddr;		if(pixelsize==2) /* 16bit pixels */		{			register short pixel=*((short *) pixeladdr);			pixel = ~pixel;			*((short *) pixeladdr) = pixel & 0x7FFF;		}		else if(pixelsize==4) /* 32bitPixels */		{			register int pixel=*((int *) pixeladdr);			pixel = ~pixel;			*((int *) pixeladdr) = pixel & 0xFFFFFF;		}		else			return;	}	else		return;}char WritePixel( PixMapHandle thePixMap, short x, short y, JRGBColor theColor ){	if( ((*thePixMap)->pixelSize > 8)&&((*thePixMap)->pixelType == 16) )	{		int pixelsize = ((*thePixMap)->pixelSize/8);		int rowsize=pixelsize*((*thePixMap)->bounds.right-(*thePixMap)->bounds.left);		void *pixeladdr = (pixelsize*x)+(y*rowsize)+(*thePixMap)->baseAddr;		if(theColor.alpha==0)		{			if(pixelsize==2) /*16 bits color*/			{				short final16color = (theColor.red >> 3)<<10;				final16color |= (theColor.green >> 3) << 5;				final16color |= theColor.blue >> 3;				*((short *)pixeladdr) = final16color;			}			else if(pixelsize==4) /*32 bit color*/			{				int finalcolor = (theColor.red << 16);				finalcolor |= (theColor.green << 8);				finalcolor |= (theColor.blue);				*((int *)pixeladdr) = finalcolor;			}			else				return false;		}		return true;	}	else		return false;}char ReadPixel( PixMapHandle thePixMap, short x, short y, JRGBColor *theColor ){	if( ((*thePixMap)->pixelSize > 8)&&((*thePixMap)->pixelType == 16) )	{		int pixelsize = ((*thePixMap)->pixelSize/8);		int rowsize=pixelsize*((*thePixMap)->bounds.right-(*thePixMap)->bounds.left);		void *pixeladdr = (pixelsize*x)+(y*rowsize)+(*thePixMap)->baseAddr;		if(pixelsize==2) /*16 bits color*/		{			short final16color;			unsigned char mask=31;			final16color = *((short *)pixeladdr);			theColor->red=(final16color&(mask<<10))>>7;			theColor->green=(final16color&(mask<<5))>>2;			theColor->blue=(final16color&mask)<<3;		}		else if(pixelsize==4) /*32 bit color*/		{			int finalcolor;			unsigned char mask32=255;			finalcolor = *((int *)pixeladdr);			theColor->red = (finalcolor&(mask32<<16))>>16;			theColor->green = (finalcolor&(mask32<<8))>>8;			theColor->blue = (finalcolor&mask32);		}		else			return false;		theColor->alpha=0;		return true;	}	else		return false;}