Main Page | Modules | Data Structures | File List | Data Fields | Globals | Related Pages

colours.c

Go to the documentation of this file.
00001 00002 /* ---------------------------------------------------------------------------- 00003 @COPYRIGHT : 00004 Copyright 1993,1994,1995 David MacDonald, 00005 McConnell Brain Imaging Centre, 00006 Montreal Neurological Institute, McGill University. 00007 Permission to use, copy, modify, and distribute this 00008 software and its documentation for any purpose and without 00009 fee is hereby granted, provided that the above copyright 00010 notice appear in all copies. The author and McGill University 00011 make no representations about the suitability of this 00012 software for any purpose. It is provided "as is" without 00013 express or implied warranty. 00014 ---------------------------------------------------------------------------- */ 00015 00016 #include <volume_io/internal_volume_io.h> 00017 #include <bicpl/objects.h> 00018 00019 #ifndef lint 00020 static char rcsid[] = "$Header: /software/source//libraries/bicpl/Objects/colours.c,v 1.10 2000/02/06 15:30:42 stever Exp $"; 00021 #endif 00022 00023 private Colour ANTIQUE_WHITE_COL; 00024 private Colour ALICE_BLUE_COL; 00025 private Colour AQUAMARINE_COL; 00026 private Colour AZURE_COL; 00027 private Colour BEIGE_COL; 00028 private Colour BISQUE_COL; 00029 private Colour BLACK_COL; 00030 private Colour BLANCHED_ALMOND_COL; 00031 private Colour BLUE_COL; 00032 private Colour BLUE_VIOLET_COL; 00033 private Colour BRIGHT_MUSTARD_COL; 00034 private Colour BROWN_COL; 00035 private Colour BURLYWOOD_COL; 00036 private Colour CADET_BLUE_COL; 00037 private Colour CHARTREUSE_COL; 00038 private Colour CHOCOLATE_COL; 00039 private Colour CORAL_COL; 00040 private Colour CORNFLOWER_BLUE_COL; 00041 private Colour CORNSILK_COL; 00042 private Colour CYAN_COL; 00043 private Colour DARK_BROWN_COL; 00044 private Colour DARK_FIREBRICK_COL; 00045 private Colour DARK_GOLDENROD_COL; 00046 private Colour DARK_GREEN_COL; 00047 private Colour DARK_KHAKI_COL; 00048 private Colour DARK_OLIVE_GREEN_COL; 00049 private Colour DARK_ORANGE_COL; 00050 private Colour DARK_ORCHID_COL; 00051 private Colour DARK_RED_COL; 00052 private Colour DARK_SALMON_COL; 00053 private Colour DARK_SEA_GREEN_COL; 00054 private Colour DARK_SLATE_BLUE_COL; 00055 private Colour DARK_SLATE_GRAY_COL; 00056 private Colour DARK_SLATE_GREY_COL; 00057 private Colour DARK_TURQUOISE_COL; 00058 private Colour DARK_VIOLET_COL; 00059 private Colour DEEP_PINK_COL; 00060 private Colour DEEP_SKY_BLUE_COL; 00061 private Colour DIM_GRAY_COL; 00062 private Colour DIM_GREY_COL; 00063 private Colour DODGER_BLUE_COL; 00064 private Colour FIREBRICK_COL; 00065 private Colour FLORAL_WHITE_COL; 00066 private Colour FOREST_GREEN_COL; 00067 private Colour GAINSBORO_COL; 00068 private Colour GHOST_WHITE_COL; 00069 private Colour GOLDENROD_COL; 00070 private Colour GOLD_COL; 00071 private Colour GRAY_COL; 00072 private Colour GREEN_COL; 00073 private Colour GREEN_YELLOW_COL; 00074 private Colour GREY_COL; 00075 private Colour HONEYDEW_COL; 00076 private Colour HOT_PINK_COL; 00077 private Colour INDIAN_RED_COL; 00078 private Colour IVORY_COL; 00079 private Colour KHAKI_COL; 00080 private Colour LAVENDER_BLUSH_COL; 00081 private Colour LAVENDER_COL; 00082 private Colour LAWN_GREEN_COL; 00083 private Colour LEMON_CHIFFON_COL; 00084 private Colour LIGHT_BLUE_COL; 00085 private Colour LIGHT_CORAL_COL; 00086 private Colour LIGHT_CYAN_COL; 00087 private Colour LIGHT_GOLDENROD_COL; 00088 private Colour LIGHT_GOLDENROD_YELLOW_COL; 00089 private Colour LIGHT_GRAY_COL; 00090 private Colour LIGHT_GREY_COL; 00091 private Colour LIGHT_PINK_COL; 00092 private Colour LIGHT_SALMON_COL; 00093 private Colour LIGHT_SEA_GREEN_COL; 00094 private Colour LIGHT_SKY_BLUE_COL; 00095 private Colour LIGHT_SLATE_BLUE_COL; 00096 private Colour LIGHT_SLATE_GRAY_COL; 00097 private Colour LIGHT_SLATE_GREY_COL; 00098 private Colour LIGHT_STEEL_BLUE_COL; 00099 private Colour LIGHT_YELLOW_COL; 00100 private Colour LIME_GREEN_COL; 00101 private Colour LINEN_COL; 00102 private Colour MAGENTA_COL; 00103 private Colour MAROON_COL; 00104 private Colour MEDIUM_AQUAMARINE_COL; 00105 private Colour MEDIUM_BLUE_COL; 00106 private Colour MEDIUM_ORCHID_COL; 00107 private Colour MEDIUM_PURPLE_COL; 00108 private Colour MEDIUM_SEA_GREEN_COL; 00109 private Colour MEDIUM_SLATE_BLUE_COL; 00110 private Colour MEDIUM_SPRING_GREEN_COL; 00111 private Colour MEDIUM_TURQUOISE_COL; 00112 private Colour MEDIUM_VIOLET_RED_COL; 00113 private Colour MIAMI_PINK_COL; 00114 private Colour MIAMI_TURQUOISE_COL; 00115 private Colour MIDNIGHT_BLUE_COL; 00116 private Colour MINT_CREAM_COL; 00117 private Colour MISTY_ROSE_COL; 00118 private Colour MOCCASIN_COL; 00119 private Colour NAVAJO_WHITE_COL; 00120 private Colour NAVY_BLUE_COL; 00121 private Colour NAVY_COL; 00122 private Colour OLD_LACE_COL; 00123 private Colour OLIVE_DRAB_COL; 00124 private Colour ORANGE_COL; 00125 private Colour ORANGE_RED_COL; 00126 private Colour ORCHID_COL; 00127 private Colour PALE_GOLDENROD_COL; 00128 private Colour PALE_GREEN_COL; 00129 private Colour PALE_TURQUOISE_COL; 00130 private Colour PALE_VIOLET_RED_COL; 00131 private Colour PAPAYA_WHIP_COL; 00132 private Colour PEACH_PUFF_COL; 00133 private Colour PERU_COL; 00134 private Colour PINK_COL; 00135 private Colour PLUM_COL; 00136 private Colour POWDER_BLUE_COL; 00137 private Colour PURPLE_COL; 00138 private Colour RED_COL; 00139 private Colour ROSY_BROWN_COL; 00140 private Colour ROYAL_BLUE_COL; 00141 private Colour SADDLE_BROWN_COL; 00142 private Colour SALMON_COL; 00143 private Colour SANDY_BROWN_COL; 00144 private Colour SEASHELL_COL; 00145 private Colour SEA_GREEN_COL; 00146 private Colour SIENNA_COL; 00147 private Colour SKY_BLUE_COL; 00148 private Colour SLATE_BLUE_COL; 00149 private Colour SLATE_GRAY_COL; 00150 private Colour SLATE_GREY_COL; 00151 private Colour SNOW_COL; 00152 private Colour SPRING_GREEN_COL; 00153 private Colour STEEL_BLUE_COL; 00154 private Colour TAN_COL; 00155 private Colour THISTLE_COL; 00156 private Colour TOMATO_COL; 00157 private Colour TURQUOISE_COL; 00158 private Colour VIOLET_COL; 00159 private Colour VIOLET_RED_COL; 00160 private Colour WHEAT_COL; 00161 private Colour WHITE_COL; 00162 private Colour WHITE_SMOKE_COL; 00163 private Colour YELLOW_COL; 00164 private Colour YELLOW_GREEN_COL; 00165 private Colour TRANSPARENT_COL; 00166 00167 typedef struct 00168 { 00169 STRING name; 00170 Colour *colour; 00171 } colours_struct; 00172 00173 private colours_struct colour_lookup[] = 00174 { 00175 { "TRANSPARENT", &TRANSPARENT_COL }, 00176 { "ALICE_BLUE", &ALICE_BLUE_COL }, 00177 { "ANTIQUE_WHITE", &ANTIQUE_WHITE_COL }, 00178 { "AQUAMARINE", &AQUAMARINE_COL }, 00179 { "AZURE", &AZURE_COL }, 00180 { "BEIGE", &BEIGE_COL }, 00181 { "BISQUE", &BISQUE_COL }, 00182 { "BLACK", &BLACK_COL }, 00183 { "BLANCHED_ALMOND", &BLANCHED_ALMOND_COL }, 00184 { "BLUE", &BLUE_COL }, 00185 { "BLUE_VIOLET", &BLUE_VIOLET_COL }, 00186 { "BRIGHT_MUSTARD", &BRIGHT_MUSTARD_COL }, 00187 { "BROWN", &BROWN_COL }, 00188 { "BURLYWOOD", &BURLYWOOD_COL }, 00189 { "CADET_BLUE", &CADET_BLUE_COL }, 00190 { "CHARTREUSE", &CHARTREUSE_COL }, 00191 { "CHOCOLATE", &CHOCOLATE_COL }, 00192 { "CORAL", &CORAL_COL }, 00193 { "CORNFLOWER_BLUE", &CORNFLOWER_BLUE_COL }, 00194 { "CORNSILK", &CORNSILK_COL }, 00195 { "CYAN", &CYAN_COL }, 00196 { "DARK_BROWN", &DARK_BROWN_COL }, 00197 { "DARK_FIREBRICK", &DARK_FIREBRICK_COL }, 00198 { "DARK_GOLDENROD", &DARK_GOLDENROD_COL }, 00199 { "DARK_GREEN", &DARK_GREEN_COL }, 00200 { "DARK_KHAKI", &DARK_KHAKI_COL }, 00201 { "DARK_OLIVE_GREEN", &DARK_OLIVE_GREEN_COL }, 00202 { "DARK_ORANGE", &DARK_ORANGE_COL }, 00203 { "DARK_ORCHID", &DARK_ORCHID_COL }, 00204 { "DARK_RED", &DARK_RED_COL }, 00205 { "DARK_SALMON", &DARK_SALMON_COL }, 00206 { "DARK_SEA_GREEN", &DARK_SEA_GREEN_COL }, 00207 { "DARK_SLATE_BLUE", &DARK_SLATE_BLUE_COL }, 00208 { "DARK_SLATE_GRAY", &DARK_SLATE_GRAY_COL }, 00209 { "DARK_SLATE_GREY", &DARK_SLATE_GREY_COL }, 00210 { "DARK_TURQUOISE", &DARK_TURQUOISE_COL }, 00211 { "DARK_VIOLET", &DARK_VIOLET_COL }, 00212 { "DEEP_PINK", &DEEP_PINK_COL }, 00213 { "DEEP_SKY_BLUE", &DEEP_SKY_BLUE_COL }, 00214 { "DIM_GRAY", &DIM_GRAY_COL }, 00215 { "DIM_GREY", &DIM_GREY_COL }, 00216 { "DODGER_BLUE", &DODGER_BLUE_COL }, 00217 { "FIREBRICK", &FIREBRICK_COL }, 00218 { "FLORAL_WHITE", &FLORAL_WHITE_COL }, 00219 { "FOREST_GREEN", &FOREST_GREEN_COL }, 00220 { "GAINSBORO", &GAINSBORO_COL }, 00221 { "GHOST_WHITE", &GHOST_WHITE_COL }, 00222 { "GOLD", &GOLD_COL }, 00223 { "GOLDENROD", &GOLDENROD_COL }, 00224 { "GRAY", &GRAY_COL }, 00225 { "GREEN", &GREEN_COL }, 00226 { "GREEN_YELLOW", &GREEN_YELLOW_COL }, 00227 { "GREY", &GREY_COL }, 00228 { "HONEYDEW", &HONEYDEW_COL }, 00229 { "HOT_PINK", &HOT_PINK_COL }, 00230 { "INDIAN_RED", &INDIAN_RED_COL }, 00231 { "IVORY", &IVORY_COL }, 00232 { "KHAKI", &KHAKI_COL }, 00233 { "LAVENDER", &LAVENDER_COL }, 00234 { "LAVENDER_BLUSH", &LAVENDER_BLUSH_COL }, 00235 { "LAWN_GREEN", &LAWN_GREEN_COL }, 00236 { "LEMON_CHIFFON", &LEMON_CHIFFON_COL }, 00237 { "LIGHT_BLUE", &LIGHT_BLUE_COL }, 00238 { "LIGHT_CORAL", &LIGHT_CORAL_COL }, 00239 { "LIGHT_CYAN", &LIGHT_CYAN_COL }, 00240 { "LIGHT_GOLDENROD", &LIGHT_GOLDENROD_COL }, 00241 { "LIGHT_GOLDENROD_YELLOW", &LIGHT_GOLDENROD_YELLOW_COL }, 00242 { "LIGHT_GRAY", &LIGHT_GRAY_COL }, 00243 { "LIGHT_GREY", &LIGHT_GREY_COL }, 00244 { "LIGHT_PINK", &LIGHT_PINK_COL }, 00245 { "LIGHT_SALMON", &LIGHT_SALMON_COL }, 00246 { "LIGHT_SEA_GREEN", &LIGHT_SEA_GREEN_COL }, 00247 { "LIGHT_SKY_BLUE", &LIGHT_SKY_BLUE_COL }, 00248 { "LIGHT_SLATE_BLUE", &LIGHT_SLATE_BLUE_COL }, 00249 { "LIGHT_SLATE_GRAY", &LIGHT_SLATE_GRAY_COL }, 00250 { "LIGHT_SLATE_GREY", &LIGHT_SLATE_GREY_COL }, 00251 { "LIGHT_STEEL_BLUE", &LIGHT_STEEL_BLUE_COL }, 00252 { "LIGHT_YELLOW", &LIGHT_YELLOW_COL }, 00253 { "LIME_GREEN", &LIME_GREEN_COL }, 00254 { "LINEN", &LINEN_COL }, 00255 { "MAGENTA", &MAGENTA_COL }, 00256 { "MAROON", &MAROON_COL }, 00257 { "MEDIUM_AQUAMARINE", &MEDIUM_AQUAMARINE_COL }, 00258 { "MEDIUM_BLUE", &MEDIUM_BLUE_COL }, 00259 { "MEDIUM_ORCHID", &MEDIUM_ORCHID_COL }, 00260 { "MEDIUM_PURPLE", &MEDIUM_PURPLE_COL }, 00261 { "MEDIUM_SEA_GREEN", &MEDIUM_SEA_GREEN_COL }, 00262 { "MEDIUM_SLATE_BLUE", &MEDIUM_SLATE_BLUE_COL }, 00263 { "MEDIUM_SPRING_GREEN", &MEDIUM_SPRING_GREEN_COL }, 00264 { "MEDIUM_TURQUOISE", &MEDIUM_TURQUOISE_COL }, 00265 { "MEDIUM_VIOLET_RED", &MEDIUM_VIOLET_RED_COL }, 00266 { "MIAMI_PINK", &MIAMI_PINK_COL }, 00267 { "MIAMI_TURQUOISE", &MIAMI_TURQUOISE_COL }, 00268 { "MIDNIGHT_BLUE", &MIDNIGHT_BLUE_COL }, 00269 { "MINT_CREAM", &MINT_CREAM_COL }, 00270 { "MISTY_ROSE", &MISTY_ROSE_COL }, 00271 { "MOCCASIN", &MOCCASIN_COL }, 00272 { "NAVAJO_WHITE", &NAVAJO_WHITE_COL }, 00273 { "NAVY", &NAVY_COL }, 00274 { "NAVY_BLUE", &NAVY_BLUE_COL }, 00275 { "OLD_LACE", &OLD_LACE_COL }, 00276 { "OLIVE_DRAB", &OLIVE_DRAB_COL }, 00277 { "ORANGE", &ORANGE_COL }, 00278 { "ORANGE_RED", &ORANGE_RED_COL }, 00279 { "ORCHID", &ORCHID_COL }, 00280 { "PALE_GOLDENROD", &PALE_GOLDENROD_COL }, 00281 { "PALE_GREEN", &PALE_GREEN_COL }, 00282 { "PALE_TURQUOISE", &PALE_TURQUOISE_COL }, 00283 { "PALE_VIOLET_RED", &PALE_VIOLET_RED_COL }, 00284 { "PAPAYA_WHIP", &PAPAYA_WHIP_COL }, 00285 { "PEACH_PUFF", &PEACH_PUFF_COL }, 00286 { "PERU", &PERU_COL }, 00287 { "PINK", &PINK_COL }, 00288 { "PLUM", &PLUM_COL }, 00289 { "POWDER_BLUE", &POWDER_BLUE_COL }, 00290 { "PURPLE", &PURPLE_COL }, 00291 { "RED", &RED_COL }, 00292 { "ROSY_BROWN", &ROSY_BROWN_COL }, 00293 { "ROYAL_BLUE", &ROYAL_BLUE_COL }, 00294 { "SADDLE_BROWN", &SADDLE_BROWN_COL }, 00295 { "SALMON", &SALMON_COL }, 00296 { "SANDY_BROWN", &SANDY_BROWN_COL }, 00297 { "SEASHELL", &SEASHELL_COL }, 00298 { "SEA_GREEN", &SEA_GREEN_COL }, 00299 { "SIENNA", &SIENNA_COL }, 00300 { "SKY_BLUE", &SKY_BLUE_COL }, 00301 { "SLATE_BLUE", &SLATE_BLUE_COL }, 00302 { "SLATE_GRAY", &SLATE_GRAY_COL }, 00303 { "SLATE_GREY", &SLATE_GREY_COL }, 00304 { "SNOW", &SNOW_COL }, 00305 { "SPRING_GREEN", &SPRING_GREEN_COL }, 00306 { "STEEL_BLUE", &STEEL_BLUE_COL }, 00307 { "TAN", &TAN_COL }, 00308 { "THISTLE", &THISTLE_COL }, 00309 { "TOMATO", &TOMATO_COL }, 00310 { "TURQUOISE", &TURQUOISE_COL }, 00311 { "VIOLET", &VIOLET_COL }, 00312 { "VIOLET_RED", &VIOLET_RED_COL }, 00313 { "WHEAT", &WHEAT_COL }, 00314 { "WHITE", &WHITE_COL }, 00315 { "WHITE_SMOKE", &WHITE_SMOKE_COL }, 00316 { "YELLOW", &YELLOW_COL }, 00317 { "YELLOW_GREEN", &YELLOW_GREEN_COL } 00318 }; 00319 00320 private BOOLEAN strings_equivalent( STRING, STRING ); 00321 00322 /* ----------------------------- MNI Header ----------------------------------- 00323 @NAME : check_initialize_colours 00324 @INPUT : 00325 @OUTPUT : 00326 @RETURNS : 00327 @DESCRIPTION: The first time it is called, this function creates the global 00328 colour variables. 00329 @METHOD : 00330 @GLOBALS : 00331 @CALLS : 00332 @CREATED : 1993 David MacDonald 00333 @MODIFIED : 00334 ---------------------------------------------------------------------------- */ 00335 00336 private void check_initialize_colours( void ) 00337 { 00338 static BOOLEAN first = TRUE; 00339 00340 if( first ) 00341 { 00342 first = FALSE; 00343 00344 ANTIQUE_WHITE_COL = make_Colour_0_1( 0.980392, 0.921569, 0.843137 ); 00345 AQUAMARINE_COL = make_Colour_0_1( 0.498039, 1.0, 0.831373 ); 00346 AZURE_COL = make_Colour_0_1( 0.941176, 1.0, 1.0 ); 00347 BEIGE_COL = make_Colour_0_1( 0.960784, 0.960784, 0.862745 ); 00348 BISQUE_COL = make_Colour_0_1( 1.0, 0.894118, 0.768627 ); 00349 BLACK_COL = make_Colour_0_1( 0.0, 0.0, 0.0 ); 00350 BLANCHED_ALMOND_COL = make_Colour_0_1( 1.0, 0.921569, 0.803922 ); 00351 BLUE_COL = make_Colour_0_1( 0.0, 0.0, 1.0 ); 00352 BLUE_VIOLET_COL = make_Colour_0_1( 0.541176, 0.168627, 0.886275 ); 00353 BRIGHT_MUSTARD_COL = make_Colour_0_1( 1.0, 0.752941, 0.188235 ); 00354 BROWN_COL = make_Colour_0_1( 1.0, 0.25098, 0.25098 ); 00355 BURLYWOOD_COL = make_Colour_0_1( 0.870588, 0.721569, 0.529412 ); 00356 CADET_BLUE_COL = make_Colour_0_1( 0.372549, 0.619608, 0.627451 ); 00357 CHARTREUSE_COL = make_Colour_0_1( 0.498039, 1.0, 0.0 ); 00358 CHOCOLATE_COL = make_Colour_0_1( 0.823529, 0.411765, 0.117647 ); 00359 CORAL_COL = make_Colour_0_1( 1.0, 0.447059, 0.337255 ); 00360 CORNFLOWER_BLUE_COL = make_Colour_0_1( 0.392157, 0.584314, 0.929412 ); 00361 CORNSILK_COL = make_Colour_0_1( 1.0, 0.972549, 0.862745 ); 00362 CYAN_COL = make_Colour_0_1( 0.0, 1.0, 1.0 ); 00363 DARK_BROWN_COL = make_Colour_0_1( 0.313725, 0.156863, 0.117647 ); 00364 DARK_FIREBRICK_COL = make_Colour_0_1( 0.52549, 0.101961, 0.101961 ); 00365 DARK_GOLDENROD_COL = make_Colour_0_1( 1.0, 0.72549, 0.0588235 ); 00366 DARK_GREEN_COL = make_Colour_0_1( 0.0, 0.392157, 0.0 ); 00367 DARK_KHAKI_COL = make_Colour_0_1( 0.741176, 0.717647, 0.419608 ); 00368 DARK_OLIVE_GREEN_COL = make_Colour_0_1( 0.792157, 1.0, 0.439216 ); 00369 DARK_ORANGE_COL = make_Colour_0_1( 1.0, 0.54902, 0.0 ); 00370 DARK_ORCHID_COL = make_Colour_0_1( 0.74902, 0.243137, 1.0 ); 00371 DARK_RED_COL = make_Colour_0_1( 0.501961, 0.0, 0.0 ); 00372 DARK_SALMON_COL = make_Colour_0_1( 0.913725, 0.588235, 0.478431 ); 00373 DARK_SEA_GREEN_COL = make_Colour_0_1( 0.756863, 1.0, 0.756863 ); 00374 DARK_SLATE_BLUE_COL = make_Colour_0_1( 0.282353, 0.239216, 0.545098 ); 00375 DARK_SLATE_GRAY_COL = make_Colour_0_1( 0.592157, 1.0, 1.0 ); 00376 DARK_SLATE_GREY_COL = make_Colour_0_1( 0.184314, 0.309804, 0.309804 ); 00377 DARK_TURQUOISE_COL = make_Colour_0_1( 0.0, 0.807843, 0.819608 ); 00378 DARK_VIOLET_COL = make_Colour_0_1( 0.580392, 0.0, 0.827451 ); 00379 DEEP_PINK_COL = make_Colour_0_1( 1.0, 0.0784314, 0.576471 ); 00380 DEEP_SKY_BLUE_COL = make_Colour_0_1( 0.0, 0.74902, 1.0 ); 00381 DIM_GRAY_COL = make_Colour_0_1( 0.411765, 0.411765, 0.411765 ); 00382 DIM_GREY_COL = make_Colour_0_1( 0.411765, 0.411765, 0.411765 ); 00383 DODGER_BLUE_COL = make_Colour_0_1( 0.117647, 0.564706, 1.0 ); 00384 FIREBRICK_COL = make_Colour_0_1( 0.698039, 0.133333, 0.133333 ); 00385 FLORAL_WHITE_COL = make_Colour_0_1( 1.0, 0.980392, 0.941176 ); 00386 FOREST_GREEN_COL = make_Colour_0_1( 0.133333, 0.545098, 0.133333 ); 00387 GAINSBORO_COL = make_Colour_0_1( 0.862745, 0.862745, 0.862745 ); 00388 GHOST_WHITE_COL = make_Colour_0_1( 0.972549, 0.972549, 1.0 ); 00389 GOLDENROD_COL = make_Colour_0_1( 1.0, 0.756863, 0.145098 ); 00390 GOLD_COL = make_Colour_0_1( 1.0, 0.843137, 0.0 ); 00391 GRAY_COL = make_Colour_0_1( 0.752941, 0.752941, 0.752941 ); 00392 GREEN_COL = make_Colour_0_1( 0.0, 1.0, 0.0 ); 00393 GREEN_YELLOW_COL = make_Colour_0_1( 0.678431, 1.0, 0.184314 ); 00394 GREY_COL = make_Colour_0_1( 0.752941, 0.752941, 0.752941 ); 00395 HONEYDEW_COL = make_Colour_0_1( 0.941176, 1.0, 0.941176 ); 00396 HOT_PINK_COL = make_Colour_0_1( 1.0, 0.431373, 0.705882 ); 00397 INDIAN_RED_COL = make_Colour_0_1( 1.0, 0.415686, 0.415686 ); 00398 IVORY_COL = make_Colour_0_1( 1.0, 1.0, 0.941176 ); 00399 KHAKI_COL = make_Colour_0_1( 1.0, 0.964706, 0.560784 ); 00400 LAVENDER_BLUSH_COL = make_Colour_0_1( 1.0, 0.941176, 0.960784 ); 00401 LAVENDER_COL = make_Colour_0_1( 0.901961, 0.901961, 0.980392 ); 00402 LAWN_GREEN_COL = make_Colour_0_1( 0.486275, 0.988235, 0.0 ); 00403 LEMON_CHIFFON_COL = make_Colour_0_1( 1.0, 0.980392, 0.803922 ); 00404 LIGHT_BLUE_COL = make_Colour_0_1( 0.74902, 0.937255, 1.0 ); 00405 LIGHT_CORAL_COL = make_Colour_0_1( 0.941176, 0.501961, 0.501961 ); 00406 LIGHT_CYAN_COL = make_Colour_0_1( 0.878431, 1.0, 1.0 ); 00407 LIGHT_GOLDENROD_COL = make_Colour_0_1( 1.0, 0.92549, 0.545098 ); 00408 LIGHT_GOLDENROD_YELLOW_COL = make_Colour_0_1( 0.980392, 0.980392, 0.823529 ); 00409 LIGHT_GRAY_COL = make_Colour_0_1( 0.827451, 0.827451, 0.827451 ); 00410 LIGHT_GREY_COL = make_Colour_0_1( 0.827451, 0.827451, 0.827451 ); 00411 LIGHT_PINK_COL = make_Colour_0_1( 1.0, 0.713725, 0.756863 ); 00412 LIGHT_SALMON_COL = make_Colour_0_1( 1.0, 0.627451, 0.478431 ); 00413 LIGHT_SEA_GREEN_COL = make_Colour_0_1( 0.12549, 0.698039, 0.666667 ); 00414 LIGHT_SKY_BLUE_COL = make_Colour_0_1( 0.529412, 0.807843, 0.980392 ); 00415 LIGHT_SLATE_BLUE_COL = make_Colour_0_1( 0.517647, 0.439216, 1.0 ); 00416 LIGHT_SLATE_GRAY_COL = make_Colour_0_1( 0.466667, 0.533333, 0.6 ); 00417 LIGHT_SLATE_GREY_COL = make_Colour_0_1( 0.466667, 0.533333, 0.6 ); 00418 LIGHT_STEEL_BLUE_COL = make_Colour_0_1( 0.792157, 0.882353, 1.0 ); 00419 LIGHT_YELLOW_COL = make_Colour_0_1( 1.0, 1.0, 0.878431 ); 00420 LIME_GREEN_COL = make_Colour_0_1( 0.196078, 0.803922, 0.196078 ); 00421 LINEN_COL = make_Colour_0_1( 0.980392, 0.941176, 0.901961 ); 00422 MAGENTA_COL = make_Colour_0_1( 1.0, 0.0, 1.0 ); 00423 MAROON_COL = make_Colour_0_1( 1.0, 0.203922, 0.701961 ); 00424 MEDIUM_AQUAMARINE_COL = make_Colour_0_1( 0.4, 0.803922, 0.666667 ); 00425 MEDIUM_BLUE_COL = make_Colour_0_1( 0.0, 0.0, 0.803922 ); 00426 MEDIUM_ORCHID_COL = make_Colour_0_1( 0.729412, 0.333333, 0.827451 ); 00427 MEDIUM_PURPLE_COL = make_Colour_0_1( 0.670588, 0.509804, 1.0 ); 00428 MEDIUM_SEA_GREEN_COL = make_Colour_0_1( 0.235294, 0.701961, 0.443137 ); 00429 MEDIUM_SLATE_BLUE_COL = make_Colour_0_1( 0.482353, 0.407843, 0.933333 ); 00430 MEDIUM_SPRING_GREEN_COL = make_Colour_0_1( 0.0, 0.980392, 0.603922 ); 00431 MEDIUM_TURQUOISE_COL = make_Colour_0_1( 0.282353, 0.819608, 0.8 ); 00432 MEDIUM_VIOLET_RED_COL = make_Colour_0_1( 0.780392, 0.0823529, 0.521569 ); 00433 MIAMI_PINK_COL = make_Colour_0_1( 1.0, 0.501961, 0.564706 ); 00434 MIAMI_TURQUOISE_COL = make_Colour_0_1( 0.313725, 1.0, 1.0 ); 00435 MIDNIGHT_BLUE_COL = make_Colour_0_1( 0.0980392, 0.0980392, 0.439216 ); 00436 MINT_CREAM_COL = make_Colour_0_1( 0.960784, 1.0, 0.980392 ); 00437 MISTY_ROSE_COL = make_Colour_0_1( 1.0, 0.894118, 0.882353 ); 00438 MOCCASIN_COL = make_Colour_0_1( 1.0, 0.894118, 0.709804 ); 00439 NAVAJO_WHITE_COL = make_Colour_0_1( 1.0, 0.870588, 0.678431 ); 00440 NAVY_BLUE_COL = make_Colour_0_1( 0.0, 0.0, 0.501961 ); 00441 NAVY_COL = make_Colour_0_1( 0.0, 0.0, 0.501961 ); 00442 OLD_LACE_COL = make_Colour_0_1( 0.992157, 0.960784, 0.901961 ); 00443 OLIVE_DRAB_COL = make_Colour_0_1( 0.419608, 0.556863, 0.137255 ); 00444 ORANGE_COL = make_Colour_0_1( 1.0, 0.647059, 0.0 ); 00445 ORANGE_RED_COL = make_Colour_0_1( 1.0, 0.270588, 0.0 ); 00446 ORCHID_COL = make_Colour_0_1( 0.854902, 0.439216, 0.839216 ); 00447 PALE_GOLDENROD_COL = make_Colour_0_1( 0.933333, 0.909804, 0.666667 ); 00448 PALE_GREEN_COL = make_Colour_0_1( 0.603922, 1.0, 0.603922 ); 00449 PALE_TURQUOISE_COL = make_Colour_0_1( 0.733333, 1.0, 1.0 ); 00450 PALE_VIOLET_RED_COL = make_Colour_0_1( 1.0, 0.509804, 0.670588 ); 00451 PAPAYA_WHIP_COL = make_Colour_0_1( 1.0, 0.937255, 0.835294 ); 00452 PEACH_PUFF_COL = make_Colour_0_1( 1.0, 0.854902, 0.72549 ); 00453 PERU_COL = make_Colour_0_1( 0.803922, 0.521569, 0.247059 ); 00454 PINK_COL = make_Colour_0_1( 1.0, 0.752941, 0.796078 ); 00455 PLUM_COL = make_Colour_0_1( 1.0, 0.733333, 1.0 ); 00456 POWDER_BLUE_COL = make_Colour_0_1( 0.690196, 0.878431, 0.901961 ); 00457 PURPLE_COL = make_Colour_0_1( 0.627451, 0.12549, 0.941176 ); 00458 RED_COL = make_Colour_0_1( 1.0, 0.0, 0.0 ); 00459 ROSY_BROWN_COL = make_Colour_0_1( 1.0, 0.756863, 0.756863 ); 00460 ROYAL_BLUE_COL = make_Colour_0_1( 0.282353, 0.462745, 1.0 ); 00461 SADDLE_BROWN_COL = make_Colour_0_1( 0.545098, 0.270588, 0.0745098 ); 00462 SALMON_COL = make_Colour_0_1( 1.0, 0.54902, 0.411765 ); 00463 SANDY_BROWN_COL = make_Colour_0_1( 0.956863, 0.643137, 0.376471 ); 00464 SEASHELL_COL = make_Colour_0_1( 1.0, 0.960784, 0.933333 ); 00465 SEA_GREEN_COL = make_Colour_0_1( 0.329412, 1.0, 0.623529 ); 00466 SIENNA_COL = make_Colour_0_1( 1.0, 0.509804, 0.278431 ); 00467 SKY_BLUE_COL = make_Colour_0_1( 0.529412, 0.807843, 1.0 ); 00468 SLATE_BLUE_COL = make_Colour_0_1( 0.513725, 0.435294, 1.0 ); 00469 SLATE_GRAY_COL = make_Colour_0_1( 0.776471, 0.886275, 1.0 ); 00470 SLATE_GREY_COL = make_Colour_0_1( 0.439216, 0.501961, 0.564706 ); 00471 SNOW_COL = make_Colour_0_1( 1.0, 0.980392, 0.980392 ); 00472 SPRING_GREEN_COL = make_Colour_0_1( 0.0, 1.0, 0.498039 ); 00473 STEEL_BLUE_COL = make_Colour_0_1( 0.388235, 0.721569, 1.0 ); 00474 TAN_COL = make_Colour_0_1( 1.0, 0.647059, 0.309804 ); 00475 THISTLE_COL = make_Colour_0_1( 1.0, 0.882353, 1.0 ); 00476 TOMATO_COL = make_Colour_0_1( 1.0, 0.388235, 0.278431 ); 00477 TURQUOISE_COL = make_Colour_0_1( 0.25098, 0.878431, 0.815686 ); 00478 VIOLET_COL = make_Colour_0_1( 0.933333, 0.509804, 0.933333 ); 00479 VIOLET_RED_COL = make_Colour_0_1( 1.0, 0.243137, 0.588235 ); 00480 WHEAT_COL = make_Colour_0_1( 1.0, 0.905882, 0.729412 ); 00481 WHITE_COL = make_Colour_0_1( 1.0, 1.0, 1.0 ); 00482 WHITE_SMOKE_COL = make_Colour_0_1( 0.960784, 0.960784, 0.960784 ); 00483 YELLOW_COL = make_Colour_0_1( 1.0, 1.0, 0.0 ); 00484 YELLOW_GREEN_COL = make_Colour_0_1( 0.603922, 0.803922, 0.196078 ); 00485 TRANSPARENT_COL = make_rgba_Colour( 0, 0, 0, 0 ); 00486 } 00487 } 00488 00489 /* ----------------------------- MNI Header ----------------------------------- 00490 @NAME : get_default_surfprop 00491 @INPUT : 00492 @OUTPUT : surfprop 00493 @RETURNS : 00494 @DESCRIPTION: Passes back a default surface property. 00495 @METHOD : 00496 @GLOBALS : 00497 @CALLS : 00498 @CREATED : 1993 David MacDonald 00499 @MODIFIED : 00500 ---------------------------------------------------------------------------- */ 00501 00502 public void get_default_surfprop( 00503 Surfprop *surfprop ) 00504 { 00505 Surfprop_a(*surfprop) = 0.3f; 00506 Surfprop_d(*surfprop) = 0.3f; 00507 Surfprop_s(*surfprop) = 0.4f; 00508 Surfprop_se(*surfprop) = 10.0f; 00509 Surfprop_t(*surfprop) = 1.0f; 00510 } 00511 00512 /* ----------------------------- MNI Header ----------------------------------- 00513 @NAME : lookup_colour 00514 @INPUT : colour_name 00515 @OUTPUT : col 00516 @RETURNS : TRUE if colour found 00517 @DESCRIPTION: Given a colour name, such as "red" or "Green", finds the 00518 corresponding Colour. 00519 @METHOD : 00520 @GLOBALS : 00521 @CALLS : 00522 @CREATED : 1993 David MacDonald 00523 @MODIFIED : 00524 ---------------------------------------------------------------------------- */ 00525 00526 public BOOLEAN lookup_colour( 00527 STRING colour_name, 00528 Colour *col ) 00529 { 00530 BOOLEAN found; 00531 int i; 00532 00533 check_initialize_colours(); 00534 00535 found = FALSE; 00536 00537 for_less( i, 0, SIZEOF_STATIC_ARRAY(colour_lookup) ) 00538 { 00539 if( strings_equivalent( colour_lookup[i].name, colour_name ) ) 00540 { 00541 *col = *colour_lookup[i].colour; 00542 found = TRUE; 00543 break; 00544 } 00545 } 00546 00547 return( found ); 00548 } 00549 00550 /* ----------------------------- MNI Header ----------------------------------- 00551 @NAME : lookup_colour_name 00552 @INPUT : col 00553 @OUTPUT : colour_name 00554 @RETURNS : TRUE if found 00555 @DESCRIPTION: Given a colour, tries to find a named colour with the same 00556 values, and passes back the colour name. 00557 @METHOD : 00558 @GLOBALS : 00559 @CALLS : 00560 @CREATED : 1993 David MacDonald 00561 @MODIFIED : 00562 ---------------------------------------------------------------------------- */ 00563 00564 public BOOLEAN lookup_colour_name( 00565 Colour col, 00566 STRING *colour_name ) 00567 { 00568 BOOLEAN found; 00569 int i; 00570 00571 check_initialize_colours(); 00572 00573 found = FALSE; 00574 00575 for_less( i, 0, SIZEOF_STATIC_ARRAY(colour_lookup) ) 00576 { 00577 if( col == *colour_lookup[i].colour ) 00578 { 00579 *colour_name = create_string( colour_lookup[i].name ); 00580 found = TRUE; 00581 break; 00582 } 00583 } 00584 00585 return( found ); 00586 } 00587 00588 /* ----------------------------- MNI Header ----------------------------------- 00589 @NAME : strings_equivalent 00590 @INPUT : str1 00591 str2 00592 @OUTPUT : 00593 @RETURNS : TRUE if strings equiv 00594 @DESCRIPTION: Checks if two strings are equivalent, ignoring CASE and white 00595 space. 00596 @METHOD : 00597 @GLOBALS : 00598 @CALLS : 00599 @CREATED : 1993 David MacDonald 00600 @MODIFIED : 00601 ---------------------------------------------------------------------------- */ 00602 00603 private BOOLEAN strings_equivalent( 00604 STRING str1, 00605 STRING str2 ) 00606 { 00607 BOOLEAN equivalent; 00608 int i1, i2; 00609 00610 equivalent = TRUE; 00611 i1 = 0; 00612 i2 = 0; 00613 00614 while( str1[i1] != END_OF_STRING || str2[i2] != END_OF_STRING ) 00615 { 00616 if( str1[i1] == ' ' || str1[i1] == '\t' || str1[i1] == '_' ) 00617 ++i1; 00618 else if( str2[i2] == ' ' || str2[i2] == '\t' || str2[i2] == '_' ) 00619 ++i2; 00620 else if( get_lower_case(str1[i1]) == get_lower_case(str2[i2]) ) 00621 { 00622 ++i1; 00623 ++i2; 00624 } 00625 else 00626 { 00627 equivalent = FALSE; 00628 break; 00629 } 00630 } 00631 00632 return( equivalent ); 00633 } 00634 00635 /* ----------------------------- MNI Header ----------------------------------- 00636 @NAME : rgb_to_hsl 00637 @INPUT : r 00638 g 00639 b 00640 @OUTPUT : h 00641 s 00642 l 00643 @RETURNS : 00644 @DESCRIPTION: Converts an RGB colour to a HSL (Hue-Saturation-Light) colour. 00645 This code was taken from Graphics Gems. 00646 @METHOD : 00647 @GLOBALS : 00648 @CALLS : 00649 @CREATED : 1993 David MacDonald 00650 @MODIFIED : 00651 ---------------------------------------------------------------------------- */ 00652 00653 public void rgb_to_hsl( 00654 Real r, 00655 Real g, 00656 Real b, 00657 Real *h, 00658 Real *s, 00659 Real *l ) 00660 { 00661 Real v, m, vm, r2, g2, b2; 00662 00663 check_initialize_colours(); 00664 00665 v = MAX3( r, g, b ); 00666 00667 m = MIN3( r, g, b ); 00668 00669 *l = (m + v) / 2.0; 00670 00671 if( *l > 0.0 ) 00672 { 00673 vm = v - m; 00674 *s = vm; 00675 00676 if( *s > 0.0 ) 00677 { 00678 if( *l <= 0.5 ) 00679 *s /= v + m; 00680 else 00681 *s /= 2.0 - v - m; 00682 00683 r2 = (v - r) / vm; 00684 g2 = (v - g) / vm; 00685 b2 = (v - b) / vm; 00686 00687 if( r == v ) 00688 { 00689 if( g == m ) 00690 *h = 5.0 + b2; 00691 else 00692 *h = 1.0 - g2; 00693 } 00694 else if( g == v ) 00695 { 00696 if( b == m ) 00697 *h = 1.0 + r2; 00698 else 00699 *h = 3.0 - b2; 00700 } 00701 else 00702 { 00703 if( r == m ) 00704 *h = 3.0 + g2; 00705 else 00706 *h = 5.0 - r2; 00707 } 00708 00709 *h /= 6.0; 00710 } 00711 } 00712 } 00713 00714 /* ----------------------------- MNI Header ----------------------------------- 00715 @NAME : hsl_to_rgb 00716 @INPUT : h 00717 s 00718 l 00719 @OUTPUT : r 00720 g 00721 b 00722 @RETURNS : 00723 @DESCRIPTION: Converts a HSL (Hue-Saturation-Light) colour to RGB colour. 00724 This code was taken from Graphics Gems. 00725 @METHOD : 00726 @GLOBALS : 00727 @CALLS : 00728 @CREATED : 1993 David MacDonald 00729 @MODIFIED : 00730 ---------------------------------------------------------------------------- */ 00731 00732 public void hsl_to_rgb( 00733 Real h, 00734 Real sl, 00735 Real l, 00736 Real *r, 00737 Real *g, 00738 Real *b ) 00739 { 00740 Real v; 00741 Real m, sv; 00742 int sextant; 00743 Real fract, vsf, mid1, mid2; 00744 00745 if( l <= 0.5 ) 00746 { 00747 v = l * (1.0 + sl); 00748 } 00749 else 00750 { 00751 v = l + sl - l * sl; 00752 } 00753 00754 if( v <= 0.0 ) 00755 { 00756 *r = 0.0; 00757 *g = 0.0; 00758 *b = 0.0; 00759 } 00760 else 00761 { 00762 m = l + l - v; 00763 sv = (v - m) / v; 00764 h *= 6.0; 00765 sextant = (int) h; 00766 fract = h - (Real) sextant; 00767 vsf = v * sv * fract; 00768 mid1 = m + vsf; 00769 mid2 = v - vsf; 00770 00771 switch( sextant ) 00772 { 00773 case 0: 00774 case 6: *r = v; *g = mid1; *b = m; break; 00775 case 1: *r = mid2; *g = v; *b = m; break; 00776 case 2: *r = m; *g = v; *b = mid1; break; 00777 case 3: *r = m; *g = mid2; *b = v; break; 00778 case 4: *r = mid1; *g = m; *b = v; break; 00779 case 5: *r = v; *g = m; *b = mid2; break; 00780 } 00781 } 00782 } 00783 00784 /* ----------------------------- MNI Header ----------------------------------- 00785 @NAME : convert_colour_to_hsl 00786 @INPUT : rgb 00787 @OUTPUT : hsl 00788 @RETURNS : 00789 @DESCRIPTION: Converts an rgb colour to hsl. 00790 @METHOD : 00791 @GLOBALS : 00792 @CALLS : 00793 @CREATED : 1993 David MacDonald 00794 @MODIFIED : 00795 ---------------------------------------------------------------------------- */ 00796 00797 public void convert_colour_to_hsl( 00798 Colour rgb, 00799 Colour *hsl ) 00800 { 00801 Real h, s, l; 00802 00803 rgb_to_hsl( get_Colour_r_0_1(rgb), 00804 get_Colour_g_0_1(rgb), 00805 get_Colour_b_0_1(rgb), 00806 &h, &s, &l ); 00807 00808 *hsl = make_Colour_0_1( h, s, l ); 00809 } 00810 00811 /* ----------------------------- MNI Header ----------------------------------- 00812 @NAME : convert_colour_to_rgb 00813 @INPUT : hsl 00814 @OUTPUT : rgb 00815 @RETURNS : 00816 @DESCRIPTION: Converts a hsl colour to rgb. 00817 @METHOD : 00818 @GLOBALS : 00819 @CALLS : 00820 @CREATED : 1993 David MacDonald 00821 @MODIFIED : 00822 ---------------------------------------------------------------------------- */ 00823 00824 public void convert_colour_to_rgb( 00825 Colour hsl, 00826 Colour *rgb ) 00827 { 00828 Real r, g, b; 00829 00830 hsl_to_rgb( get_Colour_r_0_1(hsl), 00831 get_Colour_g_0_1(hsl), 00832 get_Colour_b_0_1(hsl), 00833 &r, &g, &b ); 00834 00835 *rgb = make_Colour_0_1( r, g, b ); 00836 } 00837 00838 /* ----------------------------- MNI Header ----------------------------------- 00839 @NAME : equal_colours 00840 @INPUT : col1 00841 col2 00842 @OUTPUT : 00843 @RETURNS : TRUE if equal 00844 @DESCRIPTION: Determines if two colours are equal. 00845 @METHOD : 00846 @GLOBALS : 00847 @CALLS : 00848 @CREATED : 1993 David MacDonald 00849 @MODIFIED : 00850 ---------------------------------------------------------------------------- */ 00851 00852 public BOOLEAN equal_colours( 00853 Colour col1, 00854 Colour col2 ) 00855 { 00856 return( col1 == col2 ); 00857 } 00858 00859 /* ----------------------------- MNI Header ----------------------------------- 00860 @NAME : convert_colour_to_string 00861 @INPUT : col 00862 @OUTPUT : string 00863 @RETURNS : 00864 @DESCRIPTION: Converts a colour to a string. If a named colour exists for 00865 the colour, then the name is assigned to the string. Otherwise 00866 the 3 numerical components of the colour are assigned to the 00867 string, e.g. "0.3 0.7 1.0". 00868 @METHOD : 00869 @GLOBALS : 00870 @CALLS : 00871 @CREATED : 1993 David MacDonald 00872 @MODIFIED : 00873 ---------------------------------------------------------------------------- */ 00874 00875 public STRING convert_colour_to_string( 00876 Colour col ) 00877 { 00878 char buffer[EXTREMELY_LARGE_STRING_SIZE]; 00879 STRING string; 00880 00881 if( !lookup_colour_name( col, &string ) ) 00882 { 00883 (void) sprintf( buffer, "%g %g %g", 00884 get_Colour_r_0_1(col), 00885 get_Colour_g_0_1(col), 00886 get_Colour_b_0_1(col) ); 00887 string = create_string( buffer ); 00888 } 00889 00890 return( string ); 00891 } 00892 00893 /* ----------------------------- MNI Header ----------------------------------- 00894 @NAME : convert_string_to_colour 00895 @INPUT : string 00896 @OUTPUT : 00897 @RETURNS : colour 00898 @DESCRIPTION: Converts a string to a colour. If the string is a named colour 00899 such as "RED", then the corresponding colour is returned. 00900 Otherwise, the string is assumed to be of the form "0.3 1.0 0.7" 00901 and the corresponding colour returned. 00902 @METHOD : 00903 @GLOBALS : 00904 @CALLS : 00905 @CREATED : 1993 David MacDonald 00906 @MODIFIED : 00907 ---------------------------------------------------------------------------- */ 00908 00909 public Colour convert_string_to_colour( 00910 STRING string ) 00911 { 00912 Colour colour; 00913 double r, g, b, a; 00914 00915 if( !lookup_colour( string, &colour ) ) 00916 { 00917 if( sscanf( string, "%lf %lf %lf %lf", &r, &g, &b, &a ) == 4 ) 00918 colour = make_rgba_Colour_0_1( r, g, b, a ); 00919 else if( sscanf( string, "%lf,%lf,%lf,%lf", &r, &g, &b, &a ) == 4 ) 00920 colour = make_rgba_Colour_0_1( r, g, b, a ); 00921 else if( sscanf( string, "%lf %lf %lf", &r, &g, &b ) == 3 ) 00922 colour = make_Colour_0_1( r, g, b ); 00923 else if( sscanf( string, "%lf,%lf,%lf", &r, &g, &b ) == 3 ) 00924 colour = make_Colour_0_1( r, g, b ); 00925 else 00926 colour = make_Colour( 0, 0, 0 ); 00927 } 00928 00929 return( colour ); 00930 } 00931 00932 /* ----------------------------- MNI Header ----------------------------------- 00933 @NAME : get_colour_distance 00934 @INPUT : r : in range 0 to 255 00935 g 00936 b 00937 @OUTPUT : 00938 @RETURNS : Squared Distance 00939 @DESCRIPTION: Returns the squared distance between two colours, one 00940 specified by its rgb components, and the other as a Colour 00941 entity. 00942 @METHOD : 00943 @GLOBALS : 00944 @CALLS : 00945 @CREATED : 1993 David MacDonald 00946 @MODIFIED : 00947 ---------------------------------------------------------------------------- */ 00948 00949 public int get_colour_distance( 00950 int r, 00951 int g, 00952 int b, 00953 Colour c2 ) 00954 { 00955 int dr, dg, db; 00956 00957 dr = r - get_Colour_r( c2 ); 00958 dg = g - get_Colour_g( c2 ); 00959 db = b - get_Colour_b( c2 ); 00960 00961 return( dr * dr + dg * dg + db * db ); 00962 } 00963 00964 /* ----------------------------- MNI Header ----------------------------------- 00965 @NAME : find_closest_colour 00966 @INPUT : r 00967 g 00968 b 00969 n_colours 00970 colours[] 00971 @OUTPUT : 00972 @RETURNS : index into colours[] 00973 @DESCRIPTION: Finds the closest colour in a list of colours, returning the 00974 index. 00975 @METHOD : 00976 @GLOBALS : 00977 @CALLS : 00978 @CREATED : 1993 David MacDonald 00979 @MODIFIED : 00980 ---------------------------------------------------------------------------- */ 00981 00982 public int find_closest_colour( 00983 int r, 00984 int g, 00985 int b, 00986 int n_colours, 00987 Colour colours[] ) 00988 { 00989 int i, dist, min_dist, min_index; 00990 00991 min_index = -1; 00992 min_dist = 0; 00993 00994 for_less( i, 0, n_colours ) 00995 { 00996 dist = get_colour_distance( r, g, b, colours[i] ); 00997 if( i == 0 || dist < min_dist ) 00998 { 00999 min_index = i; 01000 min_dist = dist; 01001 } 01002 } 01003 01004 return( min_index ); 01005 } 01006 01007 /* ----------------------------- MNI Header ----------------------------------- 01008 @NAME : get_Colour_luminance 01009 @INPUT : colour 01010 @OUTPUT : 01011 @RETURNS : value between 0 and 255 01012 @DESCRIPTION: Converts a colour to gray-scale. 01013 @METHOD : 01014 @GLOBALS : 01015 @CALLS : 01016 @CREATED : 1993 David MacDonald 01017 @MODIFIED : 01018 ---------------------------------------------------------------------------- */ 01019 01020 public int get_Colour_luminance( 01021 Colour colour ) 01022 { 01023 return( ROUND( 0.299 * (Real) get_Colour_r(colour) + 01024 0.587 * (Real) get_Colour_g(colour) + 01025 0.114 * (Real) get_Colour_b(colour) ) ); 01026 } 01027 01028 /* ----------------------------- MNI Header ----------------------------------- 01029 @NAME : scale_colour 01030 @INPUT : colour 01031 factor 01032 @OUTPUT : 01033 @RETURNS : Colour 01034 @DESCRIPTION: Scales a colour by a factor, but not the alpha component. Does 01035 not check for overflow. 01036 @METHOD : 01037 @GLOBALS : 01038 @CALLS : 01039 @CREATED : 1993 David MacDonald 01040 @MODIFIED : 01041 ---------------------------------------------------------------------------- */ 01042 01043 public Colour scale_colour( 01044 Colour colour, 01045 Real factor ) 01046 { 01047 return( make_rgba_Colour( ROUND( (Real) get_Colour_r(colour) * factor ), 01048 ROUND( (Real) get_Colour_g(colour) * factor ), 01049 ROUND( (Real) get_Colour_b(colour) * factor ), 01050 get_Colour_a(colour) ) ); 01051 }

Generated on Wed Jul 28 09:10:56 2004 for BICPL by doxygen 1.3.7