C#を使用して、次の2つを開発しようとしました。私がそれをしている方法には、いくつかの問題があり、あなたの親切なアドバイスが必要かもしれません。さらに、同じことを行う既存の方法があるかどうかもわかりません。
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ブロックが冗長であることです-色は構造体であり、R、G、およびBはバイトなので、cはnullであり得ず、c.R.ToString()
、c.G.ToString()
、およびc.B.ToString()
は実際に失敗することはありません(失敗を確認できる唯一の方法はNullReferenceException
を使用することであり、実際にnullにすることはできません)。
以下を使用して全体をクリーンアップできます。
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);
次に、3つの色のペアを整数形式に分割します。
int value = int.Parse(hexValue, System.Globalization.NumberStyles.HexNumber);
C#6を使用できる場合は、 補間された文字列 の恩恵を受けることができ、次のように @ Ari Rothのソリューション を書き換えます。
C#6:
public static class ColorConverterExtensions
{
public static string ToHexString(this Color c) => $"#{c.R:X2}{c.G:X2}{c.B:X2}";
public static string ToRgbString(this Color c) => $"RGB({c.R}, {c.G}, {c.B})";
}
また:
this
を追加して、拡張メソッドとして使用します。string
を使用できます。例えば.
ColorTranslator.ToHtml(Color.FromArgb(Color.Tomato.ToArgb()))
これにより、KnownColorトリックを回避できます。
16進コードの場合、これを試してください
& 0x00FFFFFF
RGB 1の場合
Red
、Green
、Blue
の値実装
private static string HexConverter(Color c) {
return String.Format("#{0:X6}", c.ToArgb() & 0x00FFFFFF);
}
public static string RgbConverter(Color c) {
return String.Format("RGB({0},{1},{2})", c.R, c.G, c.B);
}
非常にうまく機能する拡張メソッドを見つけました
public static string ToHex(this Color color)
{
return String.Format("#{0}{1}{2}{3}"
, color.A.ToString("X").Length == 1 ? String.Format("0{0}", color.A.ToString("X")) : color.A.ToString("X")
, color.R.ToString("X").Length == 1 ? String.Format("0{0}", color.R.ToString("X")) : color.R.ToString("X")
, color.G.ToString("X").Length == 1 ? String.Format("0{0}", color.G.ToString("X")) : color.G.ToString("X")
, color.B.ToString("X").Length == 1 ? String.Format("0{0}", color.B.ToString("X")) : color.B.ToString("X"));
}