ColorConvert

From Second Life Wiki
Revision as of 05:22, 7 July 2009 by Siann Beck (Talk | contribs)

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

This function converts color values from various formats to a vector. Colors can be expressed three ways: as a hexidecimal value preceeded by a # character, as RGB values separated by commas, or as one of the common HTML color names. This function requires the Base2Dec function.

<lsl> vector sbColorConvert(string strData) {

   integer intRed;
   integer intGrn;
   integer intBlu;
   string  strColor;
   integer intHTML;
   list    lstHTML = [
       "aliceblue",            "f0f8ff", "antiquewhite",    "faebd7", "aqua",            "00ffff",
       "aquamarine",           "7fffd4", "azure",           "f0ffff", "beige",           "f5f5dc",
       "bisque",               "ffe4c4", "black",           "000000", "blanchedalmond",  "ffebcd",
       "blue",                 "0000ff", "blueviolet",      "8a2be2", "brown",           "a52a2a",
       "burlywood",            "deb887", "cadetblue",       "5f9ea0", "chartreuse",      "7fff00",
       "chocolate",            "d2691e", "coral",           "ff7f50", "cornflowerblue",  "6495ed",
       "cornsilk",             "fff8dc", "crimson",         "dc143c", "cyan",            "00ffff",
       "darkblue",             "00008b", "darkcyan",        "008b8b", "darkgoldenrod",   "b8860b",
       "darkgray",             "a9a9a9", "darkgreen",       "006400", "darkkhaki",       "bdb76b",
       "darkmagenta",          "8b008b", "darkolivegreen",  "556b2f", "darkorange",      "ff8c00",
       "darkorchid",           "9932cc", "darkred",         "8b0000", "darksalmon",      "e9967a",
       "darkseagreen",         "8fbc8f", "darkslateblue",   "483d8b", "darkslategray",   "2f4f4f",
       "darkturquoise",        "00ced1", "darkviolet",      "9400d3", "deeppink",        "ff1493",
       "deepskyblue",          "00bfff", "dimgray",         "696969", "dodgerblue",      "1e90ff",
       "firebrick",            "b22222", "floralwhite",     "fffaf0", "forestgreen",     "228b22",
       "fuchsia",              "ff00ff", "gainsboro",       "dcdcdc", "ghostwhite",      "f8f8ff",
       "gold",                 "ffd700", "goldenrod",       "daa520", "gray",            "808080",
       "green",                "008000", "greenyellow",     "adff2f", "honeydew",        "f0fff0",
       "hotpink",              "ff69b4", "indianred",       "cd5c5c", "indigo",          "4b0082",
       "ivory",                "fffff0", "khaki",           "f0e68c", "lavender",        "e6e6fa",
       "lavenderblush",        "fff0f5", "lawngreen",       "7cfc00", "lemonchiffon",    "fffacd",
       "lightblue",            "add8e6", "lightcoral",      "f08080", "lightcyan",       "e0ffff",
       "lightgoldenrodyellow", "fafad2", "lightgrey",       "d3d3d3", "lightgreen",      "90ee90",
       "lightpink",            "ffb6c1", "lightsalmon",     "ffa07a", "lightseagreen",   "20b2aa",
       "lightskyblue",         "87cefa", "lightslategray",  "778899", "lightsteelblue",  "b0c4de",
       "lightyellow",          "ffffe0", "lime",            "00ff00", "limegreen",       "32cd32",
       "linen",                "faf0e6", "magenta",         "ff00ff", "maroon",          "800000",
       "mediumaquamarine",     "66cdaa", "mediumblue",      "0000cd", "mediumorchid",    "ba55d3",
       "mediumpurple",         "9370d8", "mediumseagreen",  "3cb371", "mediumslateblue", "7b68ee",
       "mediumspringgreen",    "00fa9a", "mediumturquoise", "48d1cc", "mediumvioletred", "c71585",
       "midnightblue",         "191970", "mintcream",       "f5fffa", "mistyrose",       "ffe4e1",
       "moccasin",             "ffe4b5", "navajowhite",     "ffdead", "navy",            "000080",
       "oldlace",              "fdf5e6", "olive",           "808000", "olivedrab",       "6b8e23",
       "orange",               "ffa500", "orangered",       "ff4500", "orchid",          "da70d6",
       "palegoldenrod",        "eee8aa", "palegreen",       "98fb98", "paleturquoise",   "afeeee",
       "palevioletred",        "d87093", "papayawhip",      "ffefd5", "peachpuff",       "ffdab9",
       "peru",                 "cd853f", "pink",            "ffc0cb", "plum",            "dda0dd",
       "powderblue",           "b0e0e6", "purple",          "800080", "red",             "ff0000",
       "rosybrown",            "bc8f8f", "royalblue",       "4169e1", "saddlebrown",     "8b4513",
       "salmon",               "fa8072", "sandybrown",      "f4a460", "seagreen",        "2e8b57",
       "seashell",             "fff5ee", "sienna",          "a0522d", "silver",          "c0c0c0",
       "skyblue",              "87ceeb", "slateblue",       "6a5acd", "slategray",       "708090",
       "snow",                 "fffafa", "springgreen",     "00ff7f", "steelblue",       "4682b4",
       "tan",                  "d2b48c", "teal",            "008080", "thistle",         "d8bfd8",
       "tomato",               "ff6347", "turquoise",       "40e0d0", "violet",          "ee82ee",
       "wheat",                "f5deb3", "white",           "ffffff", "whitesmoke",      "f5f5f5",
       "yellow",               "ffff00", "yellowgreen",     "9acd32"
   ];
   intHTML = llListFindList(lstHTML, [llToLower(strData)]);
   if (intHTML > -1) {
       strColor = llList2String(lstHTML, intHTML + 1);
   }
   if (llGetSubString(strData, 0, 0) == "#") {
       strColor = llToLower(llGetSubString(strData, 1, -1));
   }
   if (llStringLength(strColor) > 0) {
       intRed = sbBase2Dec(llGetSubString(strColor, 0, 1), 16);
       intGrn = sbBase2Dec(llGetSubString(strColor, 2, 3), 16);
       intBlu = sbBase2Dec(llGetSubString(strColor, 4, 5), 16);
   }
   else {
       list    lstRGB = llParseString2List(strData, [","], []);
       intRed = llList2Integer(lstRGB, 0);
       intGrn = llList2Integer(lstRGB, 1);
       intBlu = llList2Integer(lstRGB, 2);
   }
   return <intRed, intGrn, intBlu> / 255;

} </lsl>