アジョブジ星通信

進捗が出た頃に更新されるブログ。

ColorのRGBだけを取り出して16進数にするコード

せっかく作ったけど使わなそうなのでここにメモ

ColorはSystem.Windows.Mediaの方です。

/// <summary>
/// 24bitの16進数を返します
/// </summary>
public static string ToHexadecimal(this Color source)
{
    return BitConverter.ToString(new byte[] { source.R, source.G, source.B }).Replace("-", "");
}

/// <summary>
/// 24bitの16進数からColorを作成します
/// </summary>
public static Color HexadecimalToColor(this string source)
{
    var bytes = source
        .TrimStart('#')
        .Where(_ => _ != '-')
        .Select((c, i) => Tuple.Create(c, i))
        .GroupBy(_ => _.Item2 / 2, _ => _.Item1)//2文字ずつ区切る
        .OrderBy(_ => _.Key)
        .Select(_ => byte.Parse(new string(_.ToArray()), NumberStyles.HexNumber))
        .ToArray();
    return Color.FromRgb(bytes[0], bytes[1], bytes[2]);
}