.NETを使用して16進数のカラーコードから色を取得するにはどうすればよいですか?


595

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

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


3
ハッシュコードで多分それらは#00ff00を意味しますか?
Mark Byers、2010年

12
Viky- それをハッシュコード呼ばないでください。ややこしい。;-)色の16進数表現です。
Wim Hollebrandse、2010年

10
#FF0000HTML(または16進数)のカラーコードであり、ハッシュコードではありません。違いを学んでください。
SLaks

10
記号#は多くの国でハッシュと呼ばれているため、混乱しています。
GeoffM 2012

4
@axeman ??? C#のGetHashCode()が何をするかを誤解しているかもしれません。GetHashCode()は、.NETのすべてのオブジェクトのメソッドです。Colorクラスから16進値を返しません。
John

回答:


736

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

using System.Windows.Media;

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

@Thorarinアルファ値を取得する方法に関するヘルプ。この値をWebデザインのcss rgbaと互換性があるように変換する必要があるため。
Siddharth Pandey 2014

2
@ヨーダ最初の2桁(FF)はアルファ値です。Color.FromArgbただし、この場合はこの方法を使用する方が簡単です。あなたは浮動小数点アルファを使用する場合は、255で乗算する必要があるだろう
Thorarin

2
RGB値がある場合-> Color.FromArgb(255,192,0)
Iman

50
文字列hex = "#FFFFFF"; 色_color = System.Drawing.ColorTranslator.FromHtml(hex);
Harshal Doshi Jain

1
代わりにcolor.FromArgb()を使用しないのはなぜですか?
Nimitz E.

549

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

116

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


3
Color.FromArgbには、整数ではなく、a、r、g、およびbパラメーターが必要です。
citizen conn

7
これは、ColorTranslatorを使用できないコンパクトフレームワークを使用している場合にも役立ちます
TechyGypo 2013

7
@ user1763532- r、g、およびbをcolorcode = colorcode.Replace("#", "")単に使用int a = byte.parse(colorcode.Substring(0,2), NumberStyles.HexNumber);した後など。Substringの最初のパラメーター(インデックス)を、rの場合は2、gの場合は4、bの場合は6に置き換えることを忘れないでください。
M. Mimpen 2013

3
@ HansKesting、FromArgb1つのパラメータSystem.Drawing.Colorと4つのパラメータを受け取りますSystem.Windows.Media.Color
torvin

2
これは4バイト(例:#FFFFFFFF)HTMLカラー(incアルファ)で機能することに注意してください。3バイト(#FFFFFF)で試した場合、アルファは0になり、色は透明になります。カラーコードが8/9文字未満の場合、アルファを簡単に挿入できます。Compact Frameworkに最適です。
apc

40

このきちんとした小さな拡張メソッドもあります:

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

6
馬鹿げた質問かもしれませんが、少し遅れますが、アルファ値に-16777216を使用する理由
GeekPeek 2012年

3
一貫して16進数を使用した小さな変動:Color.FromArgb((byte)((argb&0xff000000)>> 0x18)、(byte)((argb&0xff0000)>> 0x10)、(byte)((argb&0xff00)>>を返す0x08)、(byte)(argb&0xff));
あまりにも

1
このコードに欠陥があります。何も表示されない理由を理解できませんでしたColor。このコードは16進数を適切に変換しないためです。@tooのコードを使用して修正しました。
ub3rst4r 2014年

ここにこの回答の以前のバージョンがあります:http
//stackoverflow.com/a/784852/2721611

1
あなただけ行うことができ& 0xFF、最終的にダウンシフト値にするたびに代わりにこれらすべての異なる値を必要とするの&でそれ。
Nyerguds

39

以下の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);

7
これらのどれも戻りませんSystem.Windows.Media.Color
Sinatr 2015

14
    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));
    }

2
UWPでは、Color.FromArgb()には4バイトの引数が必要です。したがって、それは次のようになります。 Globalization.NumberStyles.HexNumber)、byte.Parse(hex.Substring(4、2)、System.Globalization.NumberStyles.HexNumber));
Kibernetik 2016

13

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

11

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

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

5

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

4

この投稿は、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)");

    }

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



0

WPF:

using System.Windows.Media;

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

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

実際にはヘクスはありませんが、Color [Indigo]
George Lanetzが2016年

0

使用する

System.Drawing.Color.FromArgb(myHashCode);

2
16進文字列からint?への変換を一目で確認できます。
ソラリン

質問はもともと「ハッシュコードから色を取得する方法」として尋ねられ、ここで多くの混乱を引き起こしました。;-)
herzmeister 2010年

0

あなたがHashCodeを意味するならば .GetHashCode()、元に戻すことはできません。ハッシュ関数は双方向ではないので、「進む」だけで、戻ることはできません。

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


@Wim OPが質問を明確にするのを助けてくれてありがとう。この回答はもう必要ないので、削除することをお勧めします。
jpaugh 2018

0

プロジェクトで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からの戻り値です。

この質問に答えてくれたみんなに感謝します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.