4

これは、データベース内の私の整数色です:「8689404」。

次のように Color に変更します。

Color = ColorHelper.FromArgb(255,
        byte.Parse(Event.LABELCOLOR.Value.ToString("X8").Substring(6, 2), NumberStyles.HexNumber),
        byte.Parse(Event.LABELCOLOR.Value.ToString("X8").Substring(4, 2), NumberStyles.HexNumber),
        byte.Parse(Event.LABELCOLOR.Value.ToString("X8").Substring(2, 2), NumberStyles.HexNumber))

これにより、色の文字列「#FFFC9684」が得られます

さて、データベースに保存できるように、この色の文字列を解析して整数に戻すことができないという問題があります。私がまだ持っているものは次のとおりです。

byte A = byte.Parse(labelcolor.Color.TrimStart('#').Substring(0, 2), System.Globalization.NumberStyles.HexNumber);
byte B = byte.Parse(labelcolor.Color.TrimStart('#').Substring(6, 2), System.Globalization.NumberStyles.HexNumber);
byte G = byte.Parse(labelcolor.Color.TrimStart('#').Substring(4, 2), System.Globalization.NumberStyles.HexNumber);
byte R = byte.Parse(labelcolor.Color.TrimStart('#').Substring(2, 2), System.Globalization.NumberStyles.HexNumber);

これは私に与えます:

A = 255
B = 132
G = 150
R = 252

これらの値は正しいですが、「8689404」と比較することはできません

私の調査結果によると:

B = 132 = 84 
G = 150 = 96
R = 252 = FC
A = 255 = FF

これは私がまだ持っているすべてのものです。この色の文字列の整数をどのように取得できますか。私はWinRTで作業しています。どんな助けでも!!! 前もって感謝します

4

2 に答える 2

8

これにより、必要な正しい10進数値が生成されます。

int decValue = int.Parse("8496FC", System.Globalization.NumberStyles.HexNumber);

ご覧のとおり、10 進数値を生成するために使用される 16 進数値は、次の色コンポーネントで構成されています。

ろ(84) ろ(96) ろ(FC)

A成分を落とした状態。

substringこれは、次のように完全な 16 進数の色を使用して計算できます。

string colour = labelcolor.Color.TrimStart('#');
string R = colour.Substring(2, 2);
string G = colour.Substring(4, 2);
string B = colour.Substring(6, 2);

次に、次のように使用できます。

int decValue = int.Parse(B + G + R, System.Globalization.NumberStyles.HexNumber);
//decValue = 8689404

これが実際の例です

于 2013-08-07T14:09:12.640 に答える
0

以下の関数のようなものを使用するか、System.Drawing.Color の拡張メソッドにすることができます。

void Main()
{
    int intColor = 8689404;
    var c = Color.FromArgb(255, Color.FromArgb(intColor));

    IsEqual(c, intColor);    //prints True
}

//Assumes A = 255
bool IsEqual(Color c, int i)
{
    int j = (int)(c.ToArgb() & 0x00FFFFFF);
    return i == j;
}

拡張メソッドを作成する場合は、メソッドに適切な名前を付けたいと思うかもしれません。

于 2013-08-07T15:18:11.030 に答える