ColorConvert

From Second Life Wiki
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

This function converts color values from various formats to a vector. Colors can be expressed three ways: as a hexidecimal value (can be preceeded by "#" or "0x" or nothing at all), as RGB values separated by commas, or as one of the common HTML color names.

list lstHTML = [
        "aliceblue",            0xf0f8ff, "antiquewhite",    0xfaebd7, "aqua",            0x00ffff,
        "aquamarine",           0x7fffd4, "azure",           0xf0ffff, "beige",           0xf5f5dc,
        "bisque",               0xffe4c4, "black",           0x000000, "blanchedalmond",  0xffebcd,
        "blue",                 0x0000ff, "blueviolet",      0x8a2be2, "brown",           0xa52a2a,
        "burlywood",            0xdeb887, "cadetblue",       0x5f9ea0, "chartreuse",      0x7fff00,
        "chocolate",            0xd2691e, "coral",           0xff7f50, "cornflowerblue",  0x6495ed,
        "cornsilk",             0xfff8dc, "crimson",         0xdc143c, "cyan",            0x00ffff,
        "darkblue",             0x00008b, "darkcyan",        0x008b8b, "darkgoldenrod",   0xb8860b,
        "darkgray",             0xa9a9a9, "darkgreen",       0x006400, "darkkhaki",       0xbdb76b,
        "darkmagenta",          0x8b008b, "darkolivegreen",  0x556b2f, "darkorange",      0xff8c00,
        "darkorchid",           0x9932cc, "darkred",         0x8b0000, "darksalmon",      0xe9967a,
        "darkseagreen",         0x8fbc8f, "darkslateblue",   0x483d8b, "darkslategray",   0x2f4f4f,
        "darkturquoise",        0x00ced1, "darkviolet",      0x9400d3, "deeppink",        0xff1493,
        "deepskyblue",          0x00bfff, "dimgray",         0x696969, "dodgerblue",      0x1e90ff,
        "firebrick",            0xb22222, "floralwhite",     0xfffaf0, "forestgreen",     0x228b22,
        "fuchsia",              0xff00ff, "gainsboro",       0xdcdcdc, "ghostwhite",      0xf8f8ff,
        "gold",                 0xffd700, "goldenrod",       0xdaa520, "gray",            0x808080,
        "green",                0x008000, "greenyellow",     0xadff2f, "honeydew",        0xf0fff0,
        "hotpink",              0xff69b4, "indianred",       0xcd5c5c, "indigo",          0x4b0082,
        "ivory",                0xfffff0, "khaki",           0xf0e68c, "lavender",        0xe6e6fa,
        "lavenderblush",        0xfff0f5, "lawngreen",       0x7cfc00, "lemonchiffon",    0xfffacd,
        "lightblue",            0xadd8e6, "lightcoral",      0xf08080, "lightcyan",       0xe0ffff,
        "lightgoldenrodyellow", 0xfafad2, "lightgrey",       0xd3d3d3, "lightgreen",      0x90ee90,
        "lightpink",            0xffb6c1, "lightsalmon",     0xffa07a, "lightseagreen",   0x20b2aa,
        "lightskyblue",         0x87cefa, "lightslategray",  0x778899, "lightsteelblue",  0xb0c4de,
        "lightyellow",          0xffffe0, "lime",            0x00ff00, "limegreen",       0x32cd32,
        "linen",                0xfaf0e6, "magenta",         0xff00ff, "maroon",          0x800000,
        "mediumaquamarine",     0x66cdaa, "mediumblue",      0x0000cd, "mediumorchid",    0xba55d3,
        "mediumpurple",         0x9370d8, "mediumseagreen",  0x3cb371, "mediumslateblue", 0x7b68ee,
        "mediumspringgreen",    0x00fa9a, "mediumturquoise", 0x48d1cc, "mediumvioletred", 0xc71585,
        "midnightblue",         0x191970, "mintcream",       0xf5fffa, "mistyrose",       0xffe4e1,
        "moccasin",             0xffe4b5, "navajowhite",     0xffdead, "navy",            0x000080,
        "oldlace",              0xfdf5e6, "olive",           0x808000, "olivedrab",       0x6b8e23,
        "orange",               0xffa500, "orangered",       0xff4500, "orchid",          0xda70d6,
        "palegoldenrod",        0xeee8aa, "palegreen",       0x98fb98, "paleturquoise",   0xafeeee,
        "palevioletred",        0xd87093, "papayawhip",      0xffefd5, "peachpuff",       0xffdab9,
        "peru",                 0xcd853f, "pink",            0xffc0cb, "plum",            0xdda0dd,
        "powderblue",           0xb0e0e6, "purple",          0x800080, "red",             0xff0000,
        "rosybrown",            0xbc8f8f, "royalblue",       0x4169e1, "saddlebrown",     0x8b4513,
        "salmon",               0xfa8072, "sandybrown",      0xf4a460, "seagreen",        0x2e8b57,
        "seashell",             0xfff5ee, "sienna",          0xa0522d, "silver",          0xc0c0c0,
        "skyblue",              0x87ceeb, "slateblue",       0x6a5acd, "slategray",       0x708090,
        "snow",                 0xfffafa, "springgreen",     0x00ff7f, "steelblue",       0x4682b4,
        "tan",                  0xd2b48c, "teal",            0x008080, "thistle",         0xd8bfd8,
        "tomato",               0xff6347, "turquoise",       0x40e0d0, "violet",          0xee82ee,
        "wheat",                0xf5deb3, "white",           0xffffff, "whitesmoke",      0xf5f5f5,
        "yellow",               0xffff00, "yellowgreen",     0x9acd32
    ];

vector  sbColorConvert(string strData) {
    integer mode = llListFindList(lstHTML, [llToLower(strData)]);
    integer intColor = 0;

    if (~mode) {
        intColor = llList2Integer(lstHTML, mode | 1);
        mode = 8;
    }
    else {
        string strStart = llGetSubString(strData, 0, 1);
        if (strStart != "0x") {
            if (llGetSubString(strStart, 0, 0) == "#") {
                strData = "0x" + llDeleteSubString(strData, 0, 0);
            else {
                vector vecColor = (vector)("<"+strData+">");
                if (vecColor) {
                    return (vector)("<"+strData+">") / 255;
                }
                strData = "0x" + strData;
            }
        }
        intColor = (integer)strData;
        mode = llStringLength(strData);
    }
    if (mode == 8) {//RRGGBB
        return <(intColor >> 16) & 0xFF, (intColor >> 8) & 0xFF, intColor & 0xFF> / 0xFF;
    }
    else if (mode == 5) {//RGB (an HTML color format)
        return <(intColor >> 8) & 0xF, (intColor >> 4) & 0xF, intColor & 0xF> / 0xF;
    }
    return ZERO_VECTOR;//black
}