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


593

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

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


3
해시 코드는 아마도 # 00ff00을 의미합니까?
Mark Byers

12
Viky의는 -를 참조하지 않는 해시 코드로. 혼란 스럽습니다. ;-) 16 진수 색상 표현입니다.
Wim Hollebrandse

10
#FF0000해시 코드가 아닌 HTML (또는 16 진수) 색상 코드입니다. 차이점을 배우십시오.
SLaks

10
많은 국가에서 기호 #을 해시라고하므로 혼동됩니다.
GeoffM

4
@axeman ?? C #에서 GetHashCode ()가하는 일을 잘못 이해했을 수도 있습니다. GetHashCode ()는 .NET의 모든 개체에 대한 메서드입니다 . Color 클래스에서 16 진수 값을 반환하지 않습니다.
John

답변:


735

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

using System.Windows.Media;

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

@Thorarin 웹 디자인을 위해 CSS rgba와 호환되도록이 값을 변환해야하므로 알파 값을 얻는 방법에 대한 도움이 필요합니다.
Siddharth Pandey

2
@Yoda 첫 두 자리 (FF)는 알파 값입니다. Color.FromArgb이 경우 방법 을 사용하는 것이 더 쉽습니다 . 부동 소수점 알파를 사용하는 경우 255를 곱해야합니다.
Thorarin

2
RGB 값이있는 경우-> Color.FromArgb (255,192,0)
Iman

50
문자열 16 진수 = "#FFFFFF"; Color _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 매개 변수가 필요합니다.
시민 conn

7
ColorTranslator를 사용할 수없는 Compact Framework를 사용하는 경우에도 유용합니다.
TechyGypo

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

3
@HansKesting, FromArgb1 System.Drawing.Color개의 매개 변수 입력 및 4 개의 매개 변수 수신System.Windows.Media.Color
torvin

2
이것은 4 바이트 (예 : #FFFFFFFF) HTML 색상 (inc alpha)에서 작동합니다. 3 바이트 (#FFFFFF)로 시도하면 알파는 0이고 색상은 투명합니다. 색상 코드가 8/9 자 미만이면 알파를 쉽게 삽입 할 수 있습니다. 컴팩트 한 프레임 워크에 적합합니다.
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

3
16 진수를 지속적으로 사용하는 작은 변형 : Color.FromArgb ((byte) ((argb & 0xff000000) >> 0x18), (byte) ((argb & 0xff0000) >> 0x10), (byte) ((argb & 0xff00) >> 0x08), (바이트) (argb & 0xff));
너무

1
이 코드는 잘못되었습니다. 왜 아무것도 나타나지 않는지 알 수 없었 으며이 코드가 16 진수를 Color올바르게 변환하지 못했기 때문에 밝혀졌습니다 . @too의 코드를 사용하여 수정했습니다.
ub3rst4r

여기 에이 답변에 이전 버전이 있습니다 : http://stackoverflow.com/a/784852/2721611
Mojtaba Rezaeian

1
& 0xFF서로 다른 모든 값을 필요로하지 않고 매번 최종 다운 시프트 된 값을 수행 할 수 있습니다 &.
Nyerguds

39

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

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 바이트 인수가 필요합니다. 따라서 반환 Color.FromArgb (255, byte.Parse (hex.Substring (0, 2), System.Globalization.NumberStyles.HexNumber), byte.Parse (hex.Substring (2, 2), System). Globalization.NumberStyles.HexNumber), byte.Parse (hex.Substring (4, 2), System.Globalization.NumberStyles.HexNumber));
Kibernetik

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 Store 앱으로 수행하려면 @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 (완전 불투명)입니다.

즉, 6 자리 (RGB) 16 진수 색상 코드에 FF를 추가하면 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)");

    }

이것은 Hans Kesting의 답변에서 영감을 얻었습니다.



0

WPF :

using System.Windows.Media;

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

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

실제로, 16 진수는 없습니다Color [Indigo]
George Lanetz

0

사용하다

System.Drawing.Color.FromArgb(myHashCode);

2
16 진 문자열에서 int? 로의 변환을 한눈에 볼 수 있습니다 .
Thorarin

원래 질문은 "해시 코드에서 색상을 얻는 방법"으로 질문되어 여기에 많은 혼란이 생겼습니다. ;-)
herzmeister

0

에서 .GetHashCode()와 같이 HashCode를 의미하는 경우 되돌아 갈 수 없습니다. 해시 함수는 양방향이 아니므로 '앞으로'만 돌아갈 수는 없습니다.

16 진수 색상 값을 기준으로 색상을 가져와야하는 경우 Oded의 제안을 따르십시오.


@Wim OP가 질문을 명확하게하도록 도와 주셔서 감사합니다. 이 답변이 더 이상 필요하지 않다고 말하고 삭제하는 것이 좋습니다.
jpaugh

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.