2012-02-09 3 views
1

私の色をint値でdbに保存しています。System.Drawing.Color convertArgbの問題

intをColorプロパティに変更すると、Colorプロパティの値が失われます。 "Red"を返しますが、プロパティは "ff000000"を返します。私は何をしていますか?

私はこの1つを得る必要がある - あなたは間違って何もしないいるプロパティ赤ではなく進値を

+1

「FromArgb」によって返される可能性のある色は40億色あります。なぜ、このコードパスは、すべての可能性から実際に指定された色の1つを選択してからそれを特別に返すかどうか試してみると、遅くなるはずです。なぜあなたはそれが「レッド」になる必要がありますか? –

+0

[ToArgb()に続けてFromArgb()を使用しても元の色にはならない](http://stackoverflow.com/questions/721324/using-toargb-followed-by-fromargb-does-not-result)オリジナルカラー) –

答えて

6

はあなたが知られている色だけの色を混ぜ、この

System.Drawing.ColorTranslator.FromHtml("#" + "Hex value").Name 
+1

それは働いています...ありがとう) – user571874

3

。六角中

ffSystem.Drawing.Color.Red.Name

string sRedColorName = System.Drawing.Color.Red.Name; 
を使用し、あなたは色の名前を取得したい場合は System.Drawing.Color.Red.ToArgb();

によって返されるRed色、のために10進値です255に等しいです。

+0

ok。私はどのようにプロパティ "赤"を得ることができますか? – user571874

+0

@ user571874答えに記載されているように、 'System.Drawing.Color.Red.Name'を使用することができます – Shai

2

intをColorプロパティの失われたプロパティColorに変換すると、

はい、正しいです。これがColor.Nameプロパティの仕組みです。 the documentationによると:

このメソッドは、名前から色が作成された場合はユーザー定義の色名、または既知の色の名前を返します。カスタムカラーの場合、RGB値が返されます。

ですから、整数からColorオブジェクトを作成しているので、(RGB)値-ないその名-Color構造は、名前の色としてそれを認識しません。

この情報は、既知のすべての色とそのRGB値を含むマップを反復するのではなく、Colorオブジェクトが作成された時点でプライベートセンチネルフィールドに格納されているため、色情報をデータベースにシリアライズする際に、その情報を整数として失うことになります。

0

を試してみてください。既知の色をintに変換して色に戻すと、その名前は失われます。

int icolor = System.Drawing.Color.Red.ToArgb(); 

Color knownColor = System.Drawing.Color.FromArgb(icolor).ToKnownColor(); 
関連する問題