[C#] .NET을 사용하여 16 진수 색상 코드에서 색상을 얻으려면 어떻게해야합니까?

16 진 색상 코드 (예 :)에서 색상을 얻으려면 어떻게 #FFDFD991해야합니까?

파일을 읽고 16 진수 색상 코드를 받고 있습니다. System.Windows.Media.Color16 진 색상 코드에 해당하는 인스턴스 를 만들어야합니다 . 이를 위해 프레임 워크에 내장 메소드가 있습니까?



답변

나는 그것이 ARGB 코드라고 가정하고 있습니다 … System.Drawing.Color또는 당신을 언급하고 System.Windows.Media.Color있습니까? 후자는 예를 들어 WPF에서 사용됩니다. 나는 아무도 그것을 언급하지 않은 것을 보았습니다.

using System.Windows.Media;

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


답변

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 진수 값이어야 함)


답변

이 깔끔한 작은 확장 방법도 있습니다.

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


답변

아래의 세 가지 변형은 정확히 동일한 색상을 제공합니다. 마지막 것은 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);


답변

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