143

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;
}

ありがとう。

4

6 に答える 6

238

私はここで問題を見ることができません。コードは私には良さそうです。

私が考えることができる唯一のことは、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() + ")";
}
于 2010-03-07T09:01:58.303 に答える
202

シンプルに保ち、ネイティブカラートランスレータを使用できます。

Color red = ColorTranslator.FromHtml("#FF0000");
string redHex = ColorTranslator.ToHtml(red);

次に、3つの色のペアを整数形式に分割します。

int value = int.Parse(hexValue, System.Globalization.NumberStyles.HexNumber);
于 2010-03-07T07:13:54.693 に答える
46

C#6以降を使用できる場合は、補間された文字列を利用して、 @AriRothのソリューションを次のように書き直すことができます。

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クラス名の代わりにtypeキーワードを使用できます。
  • ラムダ構文を使用できます。
  • 好みに合わせて名前を変更します。
于 2016-06-14T19:58:08.143 に答える
29

例えば

 ColorTranslator.ToHtml(Color.FromArgb(Color.Tomato.ToArgb()))

これにより、KnownColorのトリックを回避できます。

于 2015-02-28T03:38:42.633 に答える
3

非常にうまく機能する拡張メソッドを見つけました

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"));
}

参照: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

于 2016-04-26T13:44:19.447 に答える
2

16進コードの場合は、これを試してください

  1. 色のARGB(アルファ、赤、緑、青)表現を取得します
  2. アルファチャネルを除外します。& 0x00FFFFFF
  3. 値をフォーマットします(16進数の場合は16進数の「X6」として)

RGB1の場合

  1. 、、値をフォーマットする だけですRedGreenBlue

実装

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);
}
于 2016-07-04T13:25:31.830 に答える