.NETを使用して16進カラーコードから色を取得するにはどうすればよいですか?
How Get Color From Hexadecimal Color Code Using
16進色からコーディングする方法(例#FFDFD991
)色を取得するには?
ファイルを読んでいて、16進カラーコードを取得しています。 16進数のカラーコードに対応するものを作成する必要がありますSystem.Windows.Media.Color
例。これを行うための組み込みメソッドがフレームワークにありますか?
#1階
あなたが見ることができます Silverlight / WPF 16進値を使用する 楕円を16進色に設定します :
your_contorl.Color = DirectCast(ColorConverter.ConvertFromString('#D8E0A627'), Color)
#2階
次の3つのバリエーションは、まったく同じ色になります。最後の利点は、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)
#3階
WPF:
using System.Windows.Media //hex to color Color color = (Color)ColorConverter.ConvertFromString('#7AFF7A7A') //color to hex string hexcolor = color.ToString()
#4階
HTMLタイプのRGBコード(16進コードと呼ばれます。たとえば#FFCC66)を意味する場合は、次を使用してください。 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')
#5階
HashCodeを.GetHashCode()
として表す場合、それではお帰りいただけないのではないかと思います。ハッシュ関数は双方向ではありません。「転送」のみが可能で、戻ることはできません。
色の16進値に基づいて色を取得する必要がある場合は、Odedの提案に従ってください。
#6階
使用する
System.Drawing.Color.FromArgb(myHashCode)
#7階
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進値である必要があります)
#8階
これはARGBコードだと思います...つまりSystem.Drawing.Color
まだSystem.Windows.Media.Color
?後者は、たとえばWPFで使用されます。私はまだ誰もそれについて言及しているのを見たことがないので、あなたがそれを探している場合に備えて:
using System.Windows.Media Color color = (Color)ColorConverter.ConvertFromString('#FFDFD991')
#9階
16進カラーコードからシステムカラーに変換しようとしている人にとって、この記事が最初の選択肢になりました。したがって、6ビット(RGB)および8ビット(ARGB)の16進値を処理するための包括的なソリューションを追加すると思います。
Microsoftのデフォルト設定によると、RGBからARGB値に変換する場合
アルファ値は暗黙的に255(完全に不透明)です。
これは、FFを6ビット(RGB)の16進カラーコードに追加することにより、8ビットのARGB16進カラーコードになることを意味します。したがって、ARGBおよびRGB 16進数を処理し、それらを適切なカラー構造に変換する簡単なメソッドを作成できます。
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)') }
これは、ハンス・ケスティングの答えに触発されています。
#10階
Windowsストアアプリを使用してこれを行う場合は、@ HansKestingと@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))
#11階
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)) }
#12階
16進数のカラーコードをSystem.Drawing.Colorに変換する必要があります。特に、WPFフォームの背景としてアリスブルーの色合いを変換する必要があります。答えを見つけるのに予想以上に時間がかかったことがわかりました。
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))
#13階
次のコードを使用できます。
Color color = System.Drawing.ColorTranslator.FromHtml('#FFDFD991')
#14F
最も基本的なものは次のとおりです。
Color.ParseColor('#ff43a047')
#15F
簡潔な拡張方法もあります。
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()