Używając C #, próbowałem rozwinąć następujące dwa. Sposób, w jaki to robię, może mieć jakiś problem i potrzebować twojej życzliwej rady. Poza tym nie wiem, czy istnieje jakaś metoda, aby zrobić to samo.
private static String HexConverter(System.Drawing.Color c)
{
String rtn = String.Empty;
try
{
rtn = "#" + c.R.ToString("X2") + c.G.ToString("X2") + c.B.ToString("X2");
}
catch (Exception ex)
{
//doing nothing
}
return rtn;
}
private static String RGBConverter(System.Drawing.Color c)
{
String rtn = String.Empty;
try
{
rtn = "RGB(" + c.R.ToString() + "," + c.G.ToString() + "," + c.B.ToString() + ")";
}
catch (Exception ex)
{
//doing nothing
}
return rtn;
}
Dzięki.
c#
asp.net
rgb
system.drawing.color
Nazmul
źródło
źródło
Odpowiedzi:
Nie widzę tutaj problemu. Według mnie kod wygląda dobrze.
Jedyną rzeczą, którą mogę pomyśleć, to że try / catch bloki są zbędne - Kolor jest struktura i R, G i B są bajty, więc c nie może być null i
c.R.ToString()
,c.G.ToString()
ic.B.ToString()
nie może faktycznie uda (the Jedynym sposobem, w jaki mogę zobaczyć, jak zawodzą, jestNullReferenceException
, a żadne z nich nie może być w rzeczywistości zerowe).Możesz wszystko wyczyścić za pomocą:
źródło
Możesz zachować prostotę i użyć rodzimego translatora kolorów:
Następnie podziel te trzy pary kolorów na postać całkowitą:
źródło
Jeśli możesz używać C # 6 lub nowszego, możesz skorzystać z interpolowanych ciągów i przepisać rozwiązanie @Ari Roth w następujący sposób:
C # 6:
Również:
this
aby użyć ich jako metod rozszerzających.string
zamiast nazwy klasy.źródło
na przykład
Pozwala to uniknąć sztuczki KnownColor.
źródło
Znalazłem metodę rozszerzenia, która działa całkiem dobrze
Ref: https://social.msdn.microsoft.com/Forums/en-US/4c77ba6c-6659-4a46-920a-7261dd4a15d0/how-to-convert-rgba-value-into-its-equivalent-hex-code? forum = winappswithcsharp
źródło
X2
zamiastX
, w przeciwnym razie możesz dostać1
zamiast,01
wtedy będzie problem.X2
wtedy nie potrzebujesz wszystkichcolor.B.ToString("X").Length == 1 ?
ternaries.W przypadku kodu szesnastkowego spróbuj tego
& 0x00FFFFFF
Dla jednego RGB
Red
,Green
,Blue
wartościRealizacja
źródło