2010-08-02 42 views

回答

3

你需要做的是什麼在你前面的問題做了相反的:

  1. 轉換從XNA顏色系統顏色
  2. 嘗試和轉換系統顏色爲已知的顏色
  3. 如果轉換工作,在已知顏色上調用ToString

eg

// Borrowed from previous question 
using XnaColor = Microsoft.Xna.Framework.Graphics.Color; 

System.Drawing.Color clrColor = System.Drawing.Color.FromName("Red"); 
XnaColor xnaColor = new XnaColor(clrColor.R, clrColor.G, clrColor.B, clrColor.A); 

// Working back the other way 
System.Drawing.Color newClrColor = System.Drawing.Color.FromArgb(xnaColor.A, xnaColor.R, xnaColor.G, xnaColor.B); 
System.Drawing.KnownColor kColor = newClrColor.ToKnownColor(); 
string colorName = kColor != 0 ? kColor.ToString() : ""; 

注意:如果顏色名稱未知,這會給你一個空字符串。

[編輯] 你可能想嘗試在這裏使用TypeConverter。我不知道,一個存在的XNA顏色類型,但它是值得一試:

string colorName = System.ComponentModel.TypeDescriptor.GetConverter(typeof(Microsoft.Xna.Framework.Graphics.Color)).ConvertToString(yourXnaColor); 

[編輯]

由於沒有以上會做你想要什麼,你必須嘗試類似的方法來處理Jon在這裏所做的:Convert string to Color in C#

您需要使用反射將所有XNA顏色拖入字典中,就像他所做的那樣,但是反轉鍵和值,所以它是字典,然後編寫一個函數,該函數使用Color參數訪問字典並返回名稱。

+0

再次感謝Bennor! 我喜歡你的第一部分代碼,但是,它總是會返回一個0作爲結果字符串,即使我將clrColor作爲一個常量,比如Color.Green,顏色名稱仍然是「0」。不知道哪裏出了問題.. – Kevin 2010-08-02 22:44:31

+1

好消息是你沒有做錯任何事情。壞消息是我提供的解決方案不起作用(其他人也不會發布到目前爲止)。它看起來像只有當轉換爲已知顏色(使用ToKnownColor)時纔可以轉換回來,而顏色首先是從已知顏色創建的。 – 2010-08-02 23:06:40

+0

聽起來很難對我,大聲笑,因爲我沒有經驗的反思,但我會嘗試,謝謝,本諾爾。 – Kevin 2010-08-02 23:42:38

3
var color = System.Drawing.Color.Blue; 
var known = color.ToKnownColor(); 
string name = known != null ? known.ToString() : ""; 
+2

他在說XNA。 – 2010-08-02 21:51:33

+0

@Bennor:我沒有做過重大的XNA工作,但是沒有System.Drawing.Color和System.Drawing.KnownColor可用?你自己的答案假定它是。 – 2010-08-02 22:09:24

+0

是的,他們肯定有訪問權限,但你仍然需要從XNA顏色轉換。 – 2010-08-02 22:13:12

1

您需要先將Microsoft.Xna.Framework.Graphics.Color轉換爲System.Drawing.Color。

var color = System.Drawing.Color.FromArgb(a,r,g,b); 

然後你得到它的名字(如果它有一個)Name屬性。

+0

謝謝,但無論是什麼顏色,仍然總是得到「0」。 – Kevin 2010-08-02 22:55:04