#include #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; }