1 /************************************************************************/ 2 /* */ 3 /* Color allocation, mainly for raster images. */ 4 /* */ 5 /************************************************************************/ 6 7 # ifndef UTIL_COLOR_H 8 # define UTIL_COLOR_H 9 10 /************************************************************************/ 11 /* */ 12 /* An RGB8 Color. */ 13 /* The most usual way to display images on a computer screen. */ 14 /* */ 15 /* An RGB16 Color. */ 16 /* Used to match X11's way of handling colors. */ 17 /* */ 18 /* NOTE that the structs use native types so the 8/16 indication is */ 19 /* more a suggestion than an implementation reality. */ 20 /* */ 21 /************************************************************************/ 22 23 # define RGB8DEB(rgb8) appDebug("%s(%3d) %s= RGBA:%d:%d:%d:%d\n", \ 24 __FILE__, __LINE__, #rgb8, \ 25 (rgb8)->rgb8Red, (rgb8)->rgb8Green, \ 26 (rgb8)->rgb8Blue, (rgb8)->rgb8Alpha ) 27 28 # define LRGB8DEB(l,rgb8) appDebug("%s(%3d) %s=%ld %s= RGBA:%d:%d:%d:%d\n", \ 29 __FILE__, __LINE__, \ 30 #l, ((long)l), #rgb8, \ 31 (rgb8)->rgb8Red, (rgb8)->rgb8Green, \ 32 (rgb8)->rgb8Blue, (rgb8)->rgb8Alpha ) 33 34 typedef struct RGB8Color 35 { 36 unsigned char rgb8Red; 37 unsigned char rgb8Green; 38 unsigned char rgb8Blue; 39 unsigned char rgb8Alpha; 40 } RGB8Color; 41 42 typedef struct RGB16Color 43 { 44 unsigned short rgb16Red; 45 unsigned short rgb16Green; 46 unsigned short rgb16Blue; 47 unsigned char rgb16Alpha; 48 } RGB16Color; 49 50 typedef enum RGBAColorComponent 51 { 52 RGBAcompRED= 0, 53 RGBAcompGREEN, 54 RGBAcompBLUE, 55 RGBAcompALPHA, 56 57 RGBAcomp_COUNT 58 } RGBAColorComponent; 59 60 /************************************************************************/ 61 /* */ 62 /* Compare RGB8Colors. */ 63 /* */ 64 /************************************************************************/ 65 66 # define bmRGB8ColorsDiffer( a, b ) ( \ 67 (a)->rgb8Red != (b)->rgb8Red || \ 68 (a)->rgb8Green != (b)->rgb8Green || \ 69 (a)->rgb8Blue != (b)->rgb8Blue || \ 70 (a)->rgb8Alpha != (b)->rgb8Alpha ) 71 72 # define utilRGB8SolidWhite( a ) { \ 73 (a)->rgb8Red= (a)->rgb8Green= (a)->rgb8Blue= 255; \ 74 (a)->rgb8Alpha= 255; } 75 76 # define utilRGB8SolidBlack( a ) { \ 77 (a)->rgb8Red= (a)->rgb8Green= (a)->rgb8Blue= 0; \ 78 (a)->rgb8Alpha= 255; } 79 80 /************************************************************************/ 81 /* */ 82 /* Routine declarations: */ 83 /* */ 84 /************************************************************************/ 85 86 extern void utilInitRGB8Color( RGB8Color * rgb8 ); 87 88 extern int utilRGB8LumaChromaHue( int * pLuma, 89 int * pChroma, 90 int * pHue, 91 const RGB8Color * rgb8 ); 92 93 extern int utilRGB8FromLumaChromaHue( RGB8Color * rgb8, 94 int luma, 95 int chroma, 96 int hue ); 97 98 extern int utilRGB8GetComponent( const RGB8Color * rgb8, 99 int prop ); 100 101 extern void utilGetTopShadowColor( RGB8Color * top, 102 const RGB8Color * back ); 103 104 extern void utilGetBottomShadowColor( RGB8Color * top, 105 const RGB8Color * back ); 106 107 extern void utilGetForegroundColor( RGB8Color * bottom, 108 const RGB8Color * back ); 109 110 # endif /* UTIL_COLOR_H */ 111