Metodele sunt puse într-o clasă statică Utils, care nu e pusă în întregime aici. Sunt marcate ca internal pentru a putea fi folosite din interiorul proiectului în care se află dar nu din afară.
Cod sursă
internal static string ColorToString(Color color){
byte a = color.A,
r = color.R,
g = color.G,
b = color.B;
byte[] arr = new byte[] { a, r, g, b };
string s = BitConverter.ToString(arr).Replace("-", "");
return "#" + s;
}
internal static Color StringToColor(string str)
{
int a = Int32.Parse(str.Substring(1, 2), System.Globalization.NumberStyles.HexNumber);
int r = Int32.Parse(str.Substring(3, 2), System.Globalization.NumberStyles.HexNumber);
int g = Int32.Parse(str.Substring(5, 2), System.Globalization.NumberStyles.HexNumber);
int b = Int32.Parse(str.Substring(7, 2), System.Globalization.NumberStyles.HexNumber);
return Color.FromArgb(a, r, g, b);
}
Capturi de ecran
Explicație
Color este un tip structură din domeniul (en. namespace) System.Drawing. Are proprietăție A (opacitatea, alfa), R (red, roșu), G (green, verde), B (blue, albastru). Aceste 4 proprietăți au tipul byte și stochează valori de la 0 la 255. Cu cât valoarea e mai mare, cu atât culoarea respectivă e mai intensă în culoarea afișată de structura Color respectivă, sau în cazul A culoarea devine mai puțin transparentă cu cât valoarea e mai mare, 255 însemnând opac complet.Funcția ColorToString transformă culoarea color într-un string. Ea folosește metoda statică BitConverter.ToString pentru a transforma tabloul unidimensional de lungime 4, tip byte cu cele 4 proprietăți in ordinea de mai sus, pentru a obține un șir de caractere cu cele 4 proprietăți în baza 16. Apoi imediat se apelează Replace pentru a șterge caracterele „-” din șirul obținut. De exemplu, înainte de Replace valoarea este "F4-19-28-F1" și se șterg caracterele „-” apoi se pune un # în față, se obține valoarea returnată „#F41928F1”.
Funcția StringToColor primește un string din care se șterge primul caracter (#) și se iau rând pe rând 2 câte 2 caractere din el: din primele 2 se obține un int cu nr. transformat în baza 10 din baza 16, la fel din celelalte. Apoi se folosește metoda statică Color.FromArgb apelată cu cele 4 valori definitorii ale unei culori: a, r, g, b.
Cele 2 metode sunt inverse una alteia.
Dacă sunt folosite în producție, aceste metode trebuie făcute să intercepteze excepțiile posibile (try - catch - finally). Doar metoda StringToColor necesită modificări în acest caz:
internal static Color StringToColor(string str)
{
try
{
int a = Int32.Parse(str.Substring(1, 2), System.Globalization.NumberStyles.HexNumber);
int r = Int32.Parse(str.Substring(3, 2), System.Globalization.NumberStyles.HexNumber);
int g = Int32.Parse(str.Substring(5, 2), System.Globalization.NumberStyles.HexNumber);
int b = Int32.Parse(str.Substring(7, 2), System.Globalization.NumberStyles.HexNumber);
return Color.FromArgb(a, r, g, b);
}
catch (Exception)
{
return Color.Empty;
}
}
Niciun comentariu:
Trimiteți un comentariu