2012-02-09 75 views
1

我將我的顏色保存在數據庫中的int值。System.Drawing.Color轉換FromArgb問題

int icolor = System.Drawing.Color.Red.ToArgb(); 
//result: -65536 

當將int轉換爲Color而不是丟失屬性Color.Name。必須返回「紅色」,但財產返回「ff000000」。我在做什麼呢?

我需要獲得這一個 - 屬性紅色而不是十六進制值

+1

「FromArgb」可以返回40億種可能的顏色。爲什麼要通過試圖確定是否從所有可能性中選擇了某種指定的顏色,然後特意返回該代碼來減慢代碼路徑?你爲什麼需要它是'紅色'? – 2012-02-09 08:10:18

+0

[使用ToArgb()後跟FromArgb()不會導致原始顏色](http://stackoverflow.com/questions/721324/using-toargb-followed-by-fromargb-does-not-result原來的顏色) – 2012-02-09 08:12:33

回答

6

試試這個

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

它工作...謝謝你) – user571874 2012-02-09 08:25:35

3

你沒有做錯什麼。

十六進制ff等於255,爲十進制值的Red顏色,這是由 System.Drawing.Color.Red.ToArgb();

返回如果您想獲得該顏色的名稱,使用System.Drawing.Color.Red.Name

string sRedColorName = System.Drawing.Color.Red.Name; 
+0

好的。我如何獲得財產名稱「紅」? – user571874 2012-02-09 08:08:02

+0

@ user571874正如在答案中指出的,你可以使用'System.Drawing.Color.Red.Name' – Shai 2012-02-09 08:23:04

2

將int轉換爲Color時比丟失屬性Color.Name。

是的,這是正確的。這是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();