Cum pot obține o culoare de un cod de culoare hexadecimal (de exemplu, #FFDFD991
)?
Am citit un fișier și primesc un cod de culoare hexadecimal. Am nevoie pentru a crea corespunzătoare a Sistemului.Windows.Mass-Media.Culoare`, de exemplu, pentru codul de culoare hexazecimal. Există o încorporat metodă în cadru pentru a face acest lucru?
Am'm presupunând că's o ARGB cod... te referi la Sistem.Desen.Culoare " sau " Sistemul.Windows.Mass-Media.Culoare`? Acesta din urmă este utilizat în WPF, de exemplu. Nu am't văzut pe nimeni să-l menționez încă, astfel încât doar în cazul în care ați fost în căutarea pentru ea:
using System.Windows.Media;
Color color = (Color)ColorConverter.ConvertFromString("#FFDFD991");
Presupunând că vrei să spui HTML de tip RGB coduri (numit Hex coduri, cum ar fi #FFCC66), utilizați ColorTranslator clasă:
System.Drawing.Color col = System.Drawing.ColorTranslator.FromHtml("#FFCC66");
Dacă, cu toate acestea, utilizați un ARGB codul hex, puteți utiliza ColorConverter clasă din Sistem.Windows.Media nume:
Color col = ColorConverter.ConvertFromString("#FFDFD991") as Color;
//or = (Color) ColorConverter.ConvertFromString("#FFCC66") ;
Dacă tu nu't doriți să utilizați ColorTranslator, puteți face cu ușurință:
string colorcode = "#FFFFFF00";
int argb = Int32.Parse(colorcode.Replace("#", ""), NumberStyles.HexNumber);
Color clr = Color.FromArgb(argb);
La colorcode este doar reprezentare hexazecimală a ARGB valoare.
EDIT
Dacă aveți nevoie pentru a utiliza 4 valori în loc de un singur număr întreg, puteți folosi acest lucru (combinarea mai multor comentarii):
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));
Notă 1: NumberStyles este în Sistem.Globalizarea. Nota 2: vă rugăm să furnizați propriile eroare de verificare (colorcode ar trebui să fie o valoare hexazecimală de 6 sau de 8 caractere)
Există, de asemenea, acest elegant mic metodă de prelungire:
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));
}
}
În utilizare:
Color color = 0xFFDFD991.ToColor();
Cele trei variante de mai jos oferă exact aceeași culoare. Ultimul are avantajul de a fi evidențiate în Visual Studio 2010 IDE (poate l's ReSharper care's-o fac) cu culoarea corectă.
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));
}
Am nevoie pentru a converti un cod de culoare HEX la un Sistem.Desen.Culoare, în special o nuanta de Alice Albastru ca un fundal pe un WPF formă și a constatat că a durat mai mult decât de așteptat pentru a găsi răspunsul:
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));
Dacă vrei să o faci cu o Aplicație din Magazinul Windows, urmat de @Hans Kesting și @Jink răspuns:
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));
Acest post a devenit du-te pentru oricine încercarea de a converti de la un cod de culoare hex la un sistem de culoare. Prin urmare, am crezut că am'd adaugă o soluție completă, care se ocupă atât cu 6 cifre (RGB) și 8 cifre (ARGB) valori hex.
În mod implicit, potrivit Microsoft, atunci când conversia de la RGB la ARGB valoare
alfa valoarea implicit este 255 (complet opac).
Acest lucru înseamnă prin adăugarea de FF la un 6 cifre (RGB) cod de culoare hex acesta devine o de 8 cifre ARGB cod de culoare hex. Prin urmare, o metodă simplă poate fi creat, care se ocupă atât ARGB și RGB hex's și le convertește în Culoarea corespunzătoare struct.
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)");
}
Acest lucru a fost inspirat de Hans Kesting's a răspunde.
Puteți vedea https://stackoverflow.com/questions/783384/silverlight-wpf-sets-ellipse-with-hexadecimal-colour/10378228#10378228 pentru a utiliza o valoare hex:
your_contorl.Color = DirectCast(ColorConverter.ConvertFromString("#D8E0A627"), Color)
Daca te referi la HashCode ca in .GetHashCode()
, I'm teamă că poate't du-te înapoi. Funcțiile Hash nu sunt bi-direcționale, poti sa te duci 'transmite' numai, nu înapoi.
Urmați Oded's sugestie, dacă aveți nevoie pentru a obține culoarea în funcție de valoarea hexazecimală a culorii.
Utilizarea
System.Drawing.Color.FromArgb(myHashCode);