質問

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ブロックは冗長であることを - cがnullのとc.R.ToString()c.G.ToString()、およびc.B.ToString()缶することはできませんので、色は構造体であり、R、G、およびBはバイトです「tは実際には(私は彼らが失敗見ることができる唯一の方法は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);

次に、整数形式に三色のペアを破る:

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 それらを拡張メソッドとして使用します。
  • type キーワードを使用できます string クラス名の代わりに。
  • ラムダ構文を使用できます。
  • 私の好みに合わせて、より明確になるように名前を変更します。

例えばます。

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

このはのKnownColorのトリックを回避することができます。

私は

は非常にうまく機能拡張メソッドを見つけました
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"));
}

参考:<のhref = "https://social.msdn.microsoft.com/Forums/en-US/4c77ba6c-6659-4a46-920a-7261dd4a15d0/how-to-convert-rgba-value-into-その相当 - ヘキサコード?フォーラム= winappswithcsharp」のrel = 『nofollowを』> https://social.msdn.microsoft.com/Forums/en-US/4c77ba6c-6659-4a46-920a-7261dd4a15d0/how-to-変換-RGBA値-に-その相当 - ヘキサコード?フォーラム= winappswithcsharpする

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

  1. 得る 色の ARGB (アルファ、レッド、グリーン、ブルー) 表現
  2. フィルターで除外する アルファチャンネル: & 0x00FFFFFF
  3. 値をフォーマットします (16 進数の場合は 16 進数「X6」として)

RGB1の場合

  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);
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top