2016年10月25日火曜日

C#の色の名前を得る

C#のXmlSerializerで色を扱いたかったんだけどうまく扱えなかったので自分でARGBを持つクラスを作った。ついでなのでColor.Nameで得られる名前も得てみたくなった。

ということでMSDNから色の値と名前をコピペしてswitchで返すようなプロパティを作ってみた。一部重複したモノがあって、それはスイッチできないので世間一般で使われているはずの方を残してそれ以外はコメントアウトした。また名前が存在しない場合はColorのName準拠、つまりConvert.ToStringで16進に変換した文字列を返す。

C#のXmlSerializer、クラスにSave/Loadメソッドを作っておけば大抵はそのままクラスのデータを簡単に保存・読み込みできるから楽なんだけど、ColorとかFontとかよく使うモノがシリアライズできなくて不便。

今回は自前でクラスを作ったけど、本来はFontConverterとかColorConverterを使ったほうが良いかも。というかせっかく標準で用意されてるので積極的に使うべき。
c# - convert font to string and back again - Stack Overflow


public string Name
{
    get
    {
        // 色はARGB各8bitの32bitカラーとし、各色が0-255の範囲に収まっているものとする 

        int A = this.A;
        int R = this.R;
        int G = this.G;
        int B = this.B;

        uint val =
            (uint)A << 8 * 3 |
            (uint)R << 8 * 2 |
            (uint)G << 8 * 1 |
            (uint)B << 8 * 0;

        switch (val)
        {
        case 0xFFF0F8FF: return ("AliceBlue");
        case 0xFFFAEBD7: return ("AntiqueWhite");
        //case 0xFF00FFFF: return ("Aqua");
        case 0xFF7FFFD4: return ("Aquamarine");
        case 0xFFF0FFFF: return ("Azure");
        case 0xFFF5F5DC: return ("Beige");
        case 0xFFFFE4C4: return ("Bisque");
        case 0xFF000000: return ("Black");
        case 0xFFFFEBCD: return ("BlanchedAlmond");
        case 0xFF0000FF: return ("Blue");
        case 0xFF8A2BE2: return ("BlueViolet");
        case 0xFFA52A2A: return ("Brown");
        case 0xFFDEB887: return ("BurlyWood");
        case 0xFF5F9EA0: return ("CadetBlue");
        case 0xFF7FFF00: return ("Chartreuse");
        case 0xFFD2691E: return ("Chocolate");
        case 0xFFFF7F50: return ("Coral");
        case 0xFF6495ED: return ("CornflowerBlue");
        case 0xFFFFF8DC: return ("Cornsilk");
        case 0xFFDC143C: return ("Crimson");
        case 0xFF00FFFF: return ("Cyan");
        case 0xFF00008B: return ("DarkBlue");
        case 0xFF008B8B: return ("DarkCyan");
        case 0xFFB8860B: return ("DarkGoldenrod");
        case 0xFFA9A9A9: return ("DarkGray");
        case 0xFF006400: return ("DarkGreen");
        case 0xFFBDB76B: return ("DarkKhaki");
        case 0xFF8B008B: return ("DarkMagenta");
        case 0xFF556B2F: return ("DarkOliveGreen");
        case 0xFFFF8C00: return ("DarkOrange");
        case 0xFF9932CC: return ("DarkOrchid");
        case 0xFF8B0000: return ("DarkRed");
        case 0xFFE9967A: return ("DarkSalmon");
        case 0xFF8FBC8F: return ("DarkSeaGreen");
        case 0xFF483D8B: return ("DarkSlateBlue");
        case 0xFF2F4F4F: return ("DarkSlateGray");
        case 0xFF00CED1: return ("DarkTurquoise");
        case 0xFF9400D3: return ("DarkViolet");
        case 0xFFFF1493: return ("DeepPink");
        case 0xFF00BFFF: return ("DeepSkyBlue");
        case 0xFF696969: return ("DimGray");
        case 0xFF1E90FF: return ("DodgerBlue");
        case 0xFFB22222: return ("Firebrick");
        case 0xFFFFFAF0: return ("FloralWhite");
        case 0xFF228B22: return ("ForestGreen");
        //case 0xFFFF00FF: return ("Fuchsia");
        case 0xFFDCDCDC: return ("Gainsboro");
        case 0xFFF8F8FF: return ("GhostWhite");
        case 0xFFFFD700: return ("Gold");
        case 0xFFDAA520: return ("Goldenrod");
        case 0xFF808080: return ("Gray");
        case 0xFF008000: return ("Green");
        case 0xFFADFF2F: return ("GreenYellow");
        case 0xFFF0FFF0: return ("Honeydew");
        case 0xFFFF69B4: return ("HotPink");
        case 0xFFCD5C5C: return ("IndianRed");
        case 0xFF4B0082: return ("Indigo");
        case 0xFFFFFFF0: return ("Ivory");
        case 0xFFF0E68C: return ("Khaki");
        case 0xFFE6E6FA: return ("Lavender");
        case 0xFFFFF0F5: return ("LavenderBlush");
        case 0xFF7CFC00: return ("LawnGreen");
        case 0xFFFFFACD: return ("LemonChiffon");
        case 0xFFADD8E6: return ("LightBlue");
        case 0xFFF08080: return ("LightCoral");
        case 0xFFE0FFFF: return ("LightCyan");
        case 0xFFFAFAD2: return ("LightGoldenrodYellow");
        case 0xFFD3D3D3: return ("LightGray");
        case 0xFF90EE90: return ("LightGreen");
        case 0xFFFFB6C1: return ("LightPink");
        case 0xFFFFA07A: return ("LightSalmon");
        case 0xFF20B2AA: return ("LightSeaGreen");
        case 0xFF87CEFA: return ("LightSkyBlue");
        case 0xFF778899: return ("LightSlateGray");
        case 0xFFB0C4DE: return ("LightSteelBlue");
        case 0xFFFFFFE0: return ("LightYellow");
        case 0xFF00FF00: return ("Lime");
        case 0xFF32CD32: return ("LimeGreen");
        case 0xFFFAF0E6: return ("Linen");
        case 0xFFFF00FF: return ("Magenta");
        case 0xFF800000: return ("Maroon");
        case 0xFF66CDAA: return ("MediumAquamarine");
        case 0xFF0000CD: return ("MediumBlue");
        case 0xFFBA55D3: return ("MediumOrchid");
        case 0xFF9370DB: return ("MediumPurple");
        case 0xFF3CB371: return ("MediumSeaGreen");
        case 0xFF7B68EE: return ("MediumSlateBlue");
        case 0xFF00FA9A: return ("MediumSpringGreen");
        case 0xFF48D1CC: return ("MediumTurquoise");
        case 0xFFC71585: return ("MediumVioletRed");
        case 0xFF191970: return ("MidnightBlue");
        case 0xFFF5FFFA: return ("MintCream");
        case 0xFFFFE4E1: return ("MistyRose");
        case 0xFFFFE4B5: return ("Moccasin");
        case 0xFFFFDEAD: return ("NavajoWhite");
        case 0xFF000080: return ("Navy");
        case 0xFFFDF5E6: return ("OldLace");
        case 0xFF808000: return ("Olive");
        case 0xFF6B8E23: return ("OliveDrab");
        case 0xFFFFA500: return ("Orange");
        case 0xFFFF4500: return ("OrangeRed");
        case 0xFFDA70D6: return ("Orchid");
        case 0xFFEEE8AA: return ("PaleGoldenrod");
        case 0xFF98FB98: return ("PaleGreen");
        case 0xFFAFEEEE: return ("PaleTurquoise");
        case 0xFFDB7093: return ("PaleVioletRed");
        case 0xFFFFEFD5: return ("PapayaWhip");
        case 0xFFFFDAB9: return ("PeachPuff");
        case 0xFFCD853F: return ("Peru");
        case 0xFFFFC0CB: return ("Pink");
        case 0xFFDDA0DD: return ("Plum");
        case 0xFFB0E0E6: return ("PowderBlue");
        case 0xFF800080: return ("Purple");
        case 0xFFFF0000: return ("Red");
        case 0xFFBC8F8F: return ("RosyBrown");
        case 0xFF4169E1: return ("RoyalBlue");
        case 0xFF8B4513: return ("SaddleBrown");
        case 0xFFFA8072: return ("Salmon");
        case 0xFFF4A460: return ("SandyBrown");
        case 0xFF2E8B57: return ("SeaGreen");
        case 0xFFFFF5EE: return ("SeaShell");
        case 0xFFA0522D: return ("Sienna");
        case 0xFFC0C0C0: return ("Silver");
        case 0xFF87CEEB: return ("SkyBlue");
        case 0xFF6A5ACD: return ("SlateBlue");
        case 0xFF708090: return ("SlateGray");
        case 0xFFFFFAFA: return ("Snow");
        case 0xFF00FF7F: return ("SpringGreen");
        case 0xFF4682B4: return ("SteelBlue");
        case 0xFFD2B48C: return ("Tan");
        case 0xFF008080: return ("Teal");
        case 0xFFD8BFD8: return ("Thistle");
        case 0xFFFF6347: return ("Tomato");
        case 0xFF40E0D0: return ("Turquoise");
        case 0xFFEE82EE: return ("Violet");
        case 0xFFF5DEB3: return ("Wheat");
        case 0xFFFFFFFF: return ("White");
        case 0xFFF5F5F5: return ("WhiteSmoke");
        case 0xFFFFFF00: return ("Yellow");
        case 0xFF9ACD32: return ("YellowGreen");
        default: return (Convert.ToString(val, 16));
        }
    }
}

0 件のコメント:

コメントを投稿