16進数のカラーコード(例:)から色を取得するにはどうすればよい#FFDFD991
ですか?
ファイルを読んでいて、16進数のカラーコードを取得しています。System.Windows.Media.Color
16進数のカラーコードに対応するインスタンスを作成する必要があります。これを行うための組み込みのメソッドがフレームワークにありますか?
#FF0000
HTML(または16進数)のカラーコードであり、ハッシュコードではありません。違いを学んでください。
16進数のカラーコード(例:)から色を取得するにはどうすればよい#FFDFD991
ですか?
ファイルを読んでいて、16進数のカラーコードを取得しています。System.Windows.Media.Color
16進数のカラーコードに対応するインスタンスを作成する必要があります。これを行うための組み込みのメソッドがフレームワークにありますか?
#FF0000
HTML(または16進数)のカラーコードであり、ハッシュコードではありません。違いを学んでください。
回答:
それはARGBコードだと思います...を参照していますSystem.Drawing.Color
かSystem.Windows.Media.Color
?後者は、たとえばWPFで使用されます。まだ誰も言及していないので、あなたがそれを探していた場合に備えて:
using System.Windows.Media;
Color color = (Color)ColorConverter.ConvertFromString("#FFDFD991");
Color.FromArgb
ただし、この場合はこの方法を使用する方が簡単です。あなたは浮動小数点アルファを使用する場合は、255で乗算する必要があるだろう
HTMLタイプのRGBコード(#FFCC66などの16進コードと呼ばれる)を意味すると想定して、ColorTranslatorクラスを使用します。
System.Drawing.Color col = System.Drawing.ColorTranslator.FromHtml("#FFCC66");
ただし、ARGB 16進コードを使用している場合は、System.Windows.Media名前空間のColorConverterクラスを使用できます。
Color col = ColorConverter.ConvertFromString("#FFDFD991") as Color;
//or = (Color) ColorConverter.ConvertFromString("#FFCC66") ;
ColorTranslatorを使用したくない場合は、次のように簡単に実行できます。
string colorcode = "#FFFFFF00";
int argb = Int32.Parse(colorcode.Replace("#", ""), NumberStyles.HexNumber);
Color clr = Color.FromArgb(argb);
カラーコードは、ARGB値の16進数表現です。
編集
単一の整数の代わりに4つの値を使用する必要がある場合は、これを使用できます(いくつかのコメントを組み合わせて):
string colorcode = "#FFFFFF00";
colorcode = colorcode.TrimStart('#');
Color col; // from System.Drawing or System.Windows.Media
if (colorcode.Length == 6)
col = Color.FromArgb(255, // hardcoded opaque
int.Parse(colorcode.Substring(0,2), NumberStyles.HexNumber),
int.Parse(colorcode.Substring(2,2), NumberStyles.HexNumber),
int.Parse(colorcode.Substring(4,2), NumberStyles.HexNumber));
else // assuming length of 8
col = Color.FromArgb(
int.Parse(colorcode.Substring(0, 2), NumberStyles.HexNumber),
int.Parse(colorcode.Substring(2, 2), NumberStyles.HexNumber),
int.Parse(colorcode.Substring(4, 2), NumberStyles.HexNumber),
int.Parse(colorcode.Substring(6, 2), NumberStyles.HexNumber));
注1:NumberStylesはSystem.Globalizationにあります。
注2:独自のエラーチェックを提供してください(カラーコードは6文字または8文字の16進値である必要があります)
colorcode = colorcode.Replace("#", "")
単に使用int a = byte.parse(colorcode.Substring(0,2), NumberStyles.HexNumber);
した後など。Substringの最初のパラメーター(インデックス)を、rの場合は2、gの場合は4、bの場合は6に置き換えることを忘れないでください。
FromArgb
1つのパラメータSystem.Drawing.Color
と4つのパラメータを受け取りますSystem.Windows.Media.Color
このきちんとした小さな拡張メソッドもあります:
static class ExtensionMethods
{
public static Color ToColor(this uint argb)
{
return Color.FromArgb((byte)((argb & -16777216)>> 0x18),
(byte)((argb & 0xff0000)>> 0x10),
(byte)((argb & 0xff00) >> 8),
(byte)(argb & 0xff));
}
}
使用中で:
Color color = 0xFFDFD991.ToColor();
Color
。このコードは16進数を適切に変換しないためです。@tooのコードを使用して修正しました。
& 0xFF
、最終的にダウンシフト値にするたびに代わりにこれらすべての異なる値を必要とするの&
でそれ。
以下の3つのバリエーションは、まったく同じ色を示します。最後の1つは、Visual Studio 2010 IDE(多分それをしているReSharper)で適切な色で強調表示されるという利点があります。
var cc1 = System.Drawing.ColorTranslator.FromHtml("#479DEE");
var cc2 = System.Drawing.Color.FromArgb(0x479DEE);
var cc3 = System.Drawing.Color.FromArgb(0x47, 0x9D, 0xEE);
System.Windows.Media.Color
。
private Color FromHex(string hex)
{
if (hex.StartsWith("#"))
hex = hex.Substring(1);
if (hex.Length != 6) throw new Exception("Color not valid");
return Color.FromArgb(
int.Parse(hex.Substring(0, 2), System.Globalization.NumberStyles.HexNumber),
int.Parse(hex.Substring(2, 2), System.Globalization.NumberStyles.HexNumber),
int.Parse(hex.Substring(4, 2), System.Globalization.NumberStyles.HexNumber));
}
HEXカラーコードをSystem.Drawing.Color、具体的にはWPFフォームの背景としてのAlice Blueのシェードに変換する必要があり、答えを見つけるのに予想以上に時間がかかることがわかりました。
using System.Windows.Media;
-
System.Drawing.Color myColor = System.Drawing.ColorTranslator.FromHtml("#EFF3F7");
this.Background = new SolidColorBrush(System.Windows.Media.Color.FromArgb(myColor.A, myColor.R, myColor.G, myColor.B));
Windowsストアアプリでそれを実行する場合は、@ Hans Kestingと@Jinkの回答に従ってください。
string colorcode = "#FFEEDDCC";
int argb = Int32.Parse(colorcode.Replace("#", ""), NumberStyles.HexNumber);
tData.DefaultData = Color.FromArgb((byte)((argb & -16777216) >> 0x18),
(byte)((argb & 0xff0000) >> 0x10),
(byte)((argb & 0xff00) >> 8),
(byte)(argb & 0xff));
この投稿は、16進数のカラーコードからシステムカラーに変換しようとするユーザーにとって重要なものになっています。したがって、6桁(RGB)と8桁(ARGB)の両方の16進値を処理する包括的なソリューションを追加すると思いました。
Microsoftによると、デフォルトでは、RGBからARGB値に変換するとき
アルファ値は暗黙的に255(完全に不透明)です。
これは、FFを6桁(RGB)の16進数のカラーコードに追加することで、8桁のARGBの16進数のカラーコードになることを意味します。したがって、ARGBとRGBの16進数の両方を処理し、適切なColor構造体に変換する単純なメソッドを作成できます。
public static System.Drawing.Color GetColorFromHexValue(string hex)
{
string cleanHex = hex.Replace("0x", "").TrimStart('#');
if (cleanHex.Length == 6)
{
//Affix fully opaque alpha hex value of FF (225)
cleanHex = "FF" + cleanHex;
}
int argb;
if (Int32.TryParse(cleanHex, NumberStyles.HexNumber, CultureInfo.InvariantCulture, out argb))
{
return System.Drawing.Color.FromArgb(argb);
}
//If method hasn't returned a color yet, then there's a problem
throw new ArgumentException("Invalid Hex value. Hex must be either an ARGB (8 digits) or RGB (6 digits)");
}
これはハンス・ケスティングの答えに触発されました。
Silverlight / WPFは、16進数の値を使用するために16進数の色で楕円を設定することがわかります。
your_contorl.Color = DirectCast(ColorConverter.ConvertFromString("#D8E0A627"), Color)
WPF:
using System.Windows.Media;
//hex to color
Color color = (Color)ColorConverter.ConvertFromString("#7AFF7A7A");
//color to hex
string hexcolor = color.ToString();
Color [Indigo]
使用する
System.Drawing.Color.FromArgb(myHashCode);
int
?への変換を一目で確認できます。
あなたがHashCodeを意味するならば .GetHashCode()
、元に戻すことはできません。ハッシュ関数は双方向ではないので、「進む」だけで、戻ることはできません。
色の16進数値に基づいて色を取得する必要がある場合は、Odedの提案に従ってください。
プロジェクトでColorDialogを使用しました。ColorDialogは、「Red」、「Fhushia」、「fff000」を返す場合があります。私はこの問題をこのように解決し、誰かを助けるかもしれません。
SolidBrush guideLineColor;
if (inputColor.Any(c => char.IsDigit(c)))
{
string colorcode = inputColor;
int argbInputColor = Int32.Parse(colorcode.Replace("#", ""), NumberStyles.HexNumber);
guideLineColor = new SolidBrush(Color.FromArgb(argbInputColor));
}
else
{
Color col = Color.FromName(inputColor);
guideLineColor = new SolidBrush(col);
}
InputColorは、ColorDialogからの戻り値です。
この質問に答えてくれたみんなに感謝します。