.NET을 사용하여 16진수 색상 코드에서 색상을 가져오려면 어떻게 해야 합니까?
16진수 색수코색예가상져는방법오을진서에상드예)에서 색상을 ?#FFDFD991
)?
나는 파일을 읽고 있고 16진수 색상 코드를 받고 있습니다.하는 해당항생합니다야해성을목을 합니다.System.Windows.Media.Color
16진수 색상 코드의 인스턴스입니다.이를 위해 프레임워크에 내장된 방법이 있습니까?
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진수 코드를 사용하는 경우 시스템의 ColorConverter 클래스를 사용할 수 있습니다.창문들.미디어 네임스페이스:
Color col = ColorConverter.ConvertFromString("#FFDFD991") as Color;
//or = (Color) ColorConverter.ConvertFromString("#FFCC66") ;
Color Translator를 사용하지 않으려는 경우 다음에서 쉽게 수행할 수 있습니다.
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는 시스템에 있습니다.세계화.
참고 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);
저는 HEX 색상 코드를 시스템으로 변환해야 했습니다.그림그리기.색상, 특히 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));
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));
}
다음 코드를 사용할 수 있습니다.
Color color = System.Drawing.ColorTranslator.FromHtml("#FFDFD991");
Windows Store App에서 @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));
이 게시물은 16진수 색상 코드에서 시스템 색상으로 변환하려는 사람들의 단골 메뉴가 되었습니다.따라서 6자리(RGB)와 8자리(ARGB)의 16진수 값을 모두 처리하는 종합 솔루션을 추가해야겠다고 생각했습니다.
Microsoft에 따르면 RGB 값에서 ARGB 값으로 변환할 때 기본적으로
알파 값은 암시적으로 255(완전 불투명)입니다.
즉, 6자리(RGB) 16진수 색상 코드에 FF를 추가하면 8자리 ARGB 16진수 색상 코드가 됩니다.따라서 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)");
}
이것은 한스 케스팅의 대답에서 영감을 받았습니다.
asp.net 에서:
color_black = (Color)new ColorConverter().ConvertFromString("#FF76B3");
16진수 값을 사용하는 경우 Silverlight/WPF 설정 타원이 16진수 색상으로 표시됩니다.
your_contorl.Color = DirectCast(ColorConverter.ConvertFromString("#D8E0A627"), Color)
색 변환기를 사용할 수 있습니다.문자열(16진수)을 색상으로 변환하는 ConvertFromString(string) 메서드입니다.
예: (이것은 "#FF1E1E1E1E"와 같은 ARGB에서 작동합니다.
Control.Background = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#1E1E1E"));
외부의 모든 사마린 개발자들을 위해, 당신은 다음과 같은 것이 필요가 있을 것입니다.
- Cast 예외가 Xamarin에 대해 설명하는 것으로 간주되지 않도록 색상 유형을 지정합니다.Forms.Color
- ColorConverter 유형의 개체 만들기
var conv = new System.Drawing.ColorConverter();
var color = (System.Drawing.Color)conv.ConvertFromString("#FF1D65AE");
WPF:
using System.Windows.Media;
//hex to color
Color color = (Color)ColorConverter.ConvertFromString("#7AFF7A7A");
//color to hex
string hexcolor = color.ToString();
사용하다
System.Drawing.Color.FromArgb(myHashCode);
프로젝트에서 ColorDialog를 사용했습니다.ColorDialog는 때때로 "Red", "Fushia"를 반환하고 "ffff000"을 반환합니다.저는 이 문제를 이렇게 해결했습니다. 누군가를 도울 수도 있습니다.
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의 반환 값입니다.
이 질문에 답해주신 모든 분들께 감사드립니다.그것은 저에게 큰 도움이 됩니다.
여기에는 이미 많은 답이 있습니다.
간단히 말해서, 저는 사용을 제안하는 사람들을 지지합니다.System.Drawing.ColorTranslator
.
어떤 사람들은 피하려고 한다는 것을 압니다.System.Windows.Media
그래서 다른 해결책이 있습니다, 그리고 당신이 가지고 싶어하기 때문에.System.Drawing.Color
당신은 에 대한 참조가 있어야 합니다.System.Drawing
이미 프로젝트에 있습니다.
간단히 말해서, 가능하다면 프레임워크를 사용하세요.
보다 완벽한 기본 솔루션
그래서, 어떤 이유로 당신이 피하고 싶다면,System.Drawing.ColorTranslator
그리고 자신만의 구현을 만듭니다. 최소한 사양을 존중하도록 해야 합니다.
이 솔루션은 다음과 같은 이점을 제공합니다.#RGB
그리고.#RGBA
속기 및 확장된 색상 정의
public static Color ParseHtmlColor(string htmlColor) => Color.FromArgb(HtmlColorToArgb(htmlColor));
public static int HtmlColorToArgb(string htmlColor, bool requireHexSpecified = false, int defaultAlpha = 0xFF)
{
if (string.IsNullOrEmpty(htmlColor))
{
throw new ArgumentNullException(nameof(htmlColor));
}
if (!htmlColor.StartsWith("#") && requireHexSpecified)
{
throw new ArgumentException($"Provided parameter '{htmlColor}' is not valid");
}
htmlColor = htmlColor.TrimStart('#');
// int[] symbols
var symbolCount = htmlColor.Length;
var value = int.Parse(htmlColor, System.Globalization.NumberStyles.HexNumber);
switch (symbolCount)
{
case 3: // RGB short hand
{
return defaultAlpha << 24
| (value & 0xF)
| (value & 0xF) << 4
| (value & 0xF0) << 4
| (value & 0xF0) << 8
| (value & 0xF00) << 8
| (value & 0xF00) << 12
;
}
case 4: // RGBA short hand
{
// Inline alpha swap
return (value & 0xF) << 24
| (value & 0xF) << 28
| (value & 0xF0) >> 4
| (value & 0xF0)
| (value & 0xF00)
| (value & 0xF00) << 4
| (value & 0xF000) << 4
| (value & 0xF000) << 8
;
}
case 6: // RGB complete definition
{
return defaultAlpha << 24 | value;
}
case 8: // RGBA complete definition
{
// Alpha swap
return (value & 0xFF) << 24 | (value >> 8);
}
default:
throw new FormatException("Invalid HTML Color");
}
}
어떤 이유로 사용하고 싶지 않은 경우System.Globalization
16진수 기호를 구문 분석하기 위해 캡처된 코드를 찾을 수 있을 것입니다.
테스트
public static void TestColors()
{
foreach (var testCase in TestCases) TestColor(testCase);
}
static string[] TestCases = new string[] {
"111",
"FFF",
"17A",
"F52",
"444F",
"2348",
"4320",
"121212",
"808080",
"FFFFFF",
"A0E0C0",
"0A070B",
"FFFFFFFF",
"808080FF",
"40807710"
};
public static void TestColor(string htmlColor)
{
Console.Write($" {htmlColor} -> ");
var color = ParseHtmlColor(htmlColor);
Console.WriteLine("0x" + color.ToArgb().ToString("X"));
}
추신: 매개 변수를 자유롭게 제거하십시오. 매개 변수는 형식 오류 및 기본값을 처리하기 위해 기능을 조정하는 방법을 보여주는 것입니다.
추신: 현재로서는 오류 메시지를 설명할 수 없습니다.
- XNA / 모노게임 (Microsoft).Xna. 프레임워크.색상).
- 6 또는 8자(알파 포함) 문자 16진수 문자열에 사용 가능
- 아마도 더 나은 대안(비트 마스킹/이동)이 있을 것입니다.
using Microsoft.Xna.Framework;
using System.Globalization;
public static class ColorBuilder
{
public static Color FromHex(string color)
{
var hex = color.Replace("#", string.Empty);
var h = NumberStyles.HexNumber;
var r = int.Parse(hex.Substring(0, 2), h);
var g = int.Parse(hex.Substring(2, 2), h);
var b = int.Parse(hex.Substring(4, 2), h);
var a = 255;
if (hex.Length == 8)
{
a = int.Parse(hex.Substring(6, 2), h);
}
return new Color(r, g, b, a);
}
}
//create a blue color
var color = ColorBuilder.FromHex("#2733C5"); //or ColorBuilder.FromHex("2733C5");
//create a blue color with 50% alpha
var colorTrans = ColorBuilder.FromHex("#2733C580");
에 있는 것처럼 해시 코드를 의미하는 경우.GetHashCode()
유감스럽게도 당신은 돌아갈 수 없습니다.해시 함수는 양방향이 아니므로 '앞으로'만 이동할 수 있고 뒤로 이동할 수 없습니다.
색상의 16진수 값을 기준으로 색상을 구해야 할 경우 Oded의 제안을 따릅니다.
언급URL : https://stackoverflow.com/questions/2109756/how-do-i-get-the-color-from-a-hexadecimal-color-code-using-net
'programing' 카테고리의 다른 글
SQL Server가 1밀리초씩 손실되는 이유는 무엇입니까? (0) | 2023.07.06 |
---|---|
VUEX의 상태 변경을 수정하는 방법은 무엇입니까? (0) | 2023.07.06 |
경로 쿼리 매개 변수 가져오기 (0) | 2023.07.06 |
EntityManager를 사용하여 여러 데이터 소스를 봄 부팅 (0) | 2023.07.06 |
여러 열에 NVL 사용 - Oracle SQL (0) | 2023.07.06 |