.NETを使用して16進数のカラーコードから色を取得する方法は?

16進数のカラーコード(例:#FFDFD991)から色を取得するにはどうしたらよいですか?

ファイルを読み込んでいて、16進数のカラーコードを取得することができます。16進カラーコードに対応する System.Windows.Media.Color インスタンスを作成する必要があります。これを行うためにフレームワークに組み込まれたメソッドはありますか?

質問へのコメント (13)
ソリューション

これはARGBコードだと思います。.. 「System.Drawing.Color」または「System.Windows.Media.Color」を参照していますか? 後者は、例えばWPFで使用されます。 まだ誰も言及していないので、あなたがそれを探していた場合に備えて:

using System.Windows.Media;

Color color = (Color)ColorConverter.ConvertFromString("#FFDFD991");
解説 (7)

HTML形式のRGBコード(Hexコードと呼ばれ、#FFCC66のようなもの)のことだとすると、ColorTranslatorクラスを使用します。

System.Drawing.Color col = System.Drawing.ColorTranslator.FromHtml("#FFCC66");

ただし、ARGBのHexコードであれば、System.Windows.Media名前空間のColorConverterクラスが利用可能です。

Color col = ColorConverter.ConvertFromString("#FFDFD991") as Color;
//or      = (Color) ColorConverter.ConvertFromString("#FFCC66") ;
解説 (0)

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進値である必要があります)。

解説 (10)

このきちんとした小さな拡張方法もあります。

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();
解説 (8)

以下の3つのバリアントはまったく同じ色になります。 最後の1つは、Visual& nbsp; Studio& nbsp; 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);
解説 (1)
    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));
    }
解説 (1)

HEXカラーコードを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));
解説 (0)

次のコードを使用できます。

Color color = System.Drawing.ColorTranslator.FromHtml("#FFDFD991");
解説 (0)

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));
解説 (0)

この投稿は、16進カラーコードからシステムカラーに変換しようとする人にとってのゴートになっています。 したがって、6桁(RGB)と8桁(ARGB)の両方の16進値を扱う包括的なソリューションを追加すると思いました。

Microsoftによると、デフォルトでは、RGBからARGB値に変換する場合。

アルファ値は暗黙的に255(完全に不透明)です。

つまり、6桁(RGB)の16進カラーコードにFFを追加すると、8桁のARGB 16進カラーコードになります。 したがって、ARGBとRGBヘクスの両方を処理し、それらを適切なカラー構造に変換する単純なメソッドを作成できます。

    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)");

    }

これはハンス・ケスティングの答えに触発されました。

解説 (0)
your_contorl.Color = DirectCast(ColorConverter.ConvertFromString("#D8E0A627"), Color)
解説 (0)

WPF:

using System.Windows.Media;

//hex to color
Color color = (Color)ColorConverter.ConvertFromString("#7AFF7A7A");

//color to hex
string hexcolor = color.ToString();
解説 (1)

もしあなたが.GetHashCode()のようなHashCodeを意味しているなら、残念ですが戻ることはできません。ハッシュ関数は双方向ではないので、戻ることはできません。

もし、色の16進数値に基づいて色を取得する必要がある場合は、Oded'の提案に従ってください。

解説 (2)

使用方法

System.Drawing.Color.FromArgb(myHashCode);
解説 (2)

最も基本的なのは単に:です。

Color.ParseColor("#ff43a047")
解説 (1)