Используя C# я пытался разработать следующие два. Путем я делаю, это может иметь некоторую проблему и нуждаться в Вашем добром совете. Кроме того, я не знаю, существует ли какой-либо существующий метод, чтобы сделать то же.
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;
}
Спасибо.
Я не вижу здесь проблемы. Код мне нравится.
Единственное, о чем я могу думать, это то, что блоки try / catch являются избыточными: Color - это структура, а R, G и B - байты, поэтому c не может быть нулевым и cRToString ()
, cGToString ()
и cBToString ()
на самом деле не могут дать сбой (единственный способ увидеть их сбой - это исключение NullReferenceException
, и ни один из них не может быть нулевым).
Вы можете очистить все это, используя следующее:
private static String HexConverter(System.Drawing.Color c)
{
return "#" + c.R.ToString("X2") + c.G.ToString("X2") + c.B.ToString("X2");
}
private static String RGBConverter(System.Drawing.Color c)
{
return "RGB(" + c.R.ToString() + "," + c.G.ToString() + "," + c.B.ToString() + ")";
}
Можно не усложнять и использовать родной транслятор цветов:
Color red = ColorTranslator.FromHtml("#FF0000");
string redHex = ColorTranslator.ToHtml(red);
Затем разбить три пары цветов в целочисленную форму:
int value = int.Parse(hexValue, System.Globalization.NumberStyles.HexNumber);