タイトルはクリアだと思います!
私が今持っているのは:
System.Drawing.Color uiui = System.Drawing.ColorTranslator.FromHtml(myString);
var intColor = (uint)((uiui.A << 24) | (uiui.R << 16) | (uiui.G << 8) | (uiui.B << 0));
var bytes = BitConverter.GetBytes(uint.Parse(value));
var brush = new SolidColorBrush();
brush.Color = Color.FromArgb(bytes[3], bytes[2], bytes[1], bytes[0]);
1- myStringは、タイトルで言ったように#FFFFFFのようなものです
2-これはBitConverter.GetBytes行で失敗します。これは、Colorでint表現を取得したために驚いています。
3-とにかく、私はCOlor変換がそれほど直感的ではないことを知っていますが、私はそれを正しく行っていないように感じます...それは良い方法ですか?
System.Windows.Media.ColorConverter
を使用できます
var color = (Color)ColorConverter.ConvertFromString("#FF010203");
//OR
var color = (Color)ColorConverter.ConvertFromString("#010203");
//OR
var color = (Color)ColorConverter.ConvertFromString("Red");
//and then:
var brush = new SolidColorBrush(color);
何を受け入れるかについてはかなり柔軟です。 ここでXAMLの例 を見てください。これらの文字列形式のいずれかをで渡すことができます。
注:これらはすべてSystem.Windows.Media
(WPFの場合)にあり、System.Drawing
(WinFormsの場合)と混同しないでください。
これは私が過去に使用したヘルパークラスです
public static Color HexStringToColor(string hexColor)
{
string hc = ExtractHexDigits(hexColor);
if (hc.Length != 6)
{
// you can choose whether to throw an exception
//throw new ArgumentException("hexColor is not exactly 6 digits.");
return Color.Empty;
}
string r = hc.Substring(0, 2);
string g = hc.Substring(2, 2);
string b = hc.Substring(4, 2);
Color color = Color.Empty;
try
{
int ri = Int32.Parse(r, NumberStyles.HexNumber);
int gi = Int32.Parse(g, NumberStyles.HexNumber);
int bi = Int32.Parse(b, NumberStyles.HexNumber);
color = Color.FromArgb(ri, gi, bi);
}
catch
{
// you can choose whether to throw an exception
//throw new ArgumentException("Conversion failed.");
return Color.Empty;
}
return color;
}
および追加のヘルパークラス
public static string ExtractHexDigits(string input)
{
// remove any characters that are not digits (like #)
var isHexDigit
= new Regex("[abcdefABCDEF\\d]+", RegexOptions.Compiled);
string newnum = "";
foreach (char c in input)
{
if (isHexDigit.IsMatch(c.ToString()))
{
newnum += c.ToString();
}
}
return newnum;
}
ColorTranslatorメソッドを使用するだけです。
ColorTranslator.FromHtml("#010203");