2010-08-02 1 views

ответ

3

Вы должны сделать обратное тому, что было сделано в вашем предыдущем вопросе:

  1. Преобразование из XNA цвета в системе цвета
  2. Try и преобразовать цвет системы к известному цвету
  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() : ""; 

Примечание: это даст вам пустую строку, если имя цвета неизвестно.

[EDIT] Возможно, вы захотите попробовать использовать TypeConverter здесь. Я не уверен, что она существует для типа XNA цвета, но это стоит выстрел:

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

[EDIT]

Поскольку ни один из вышеперечисленного не будет делать то, что вы хотите, вы Придется попробовать аналогичный подход к тому, что Джон сделал здесь: Convert string to Color in C#

Вам нужно будет вытащить все цвета XNA в словарь с использованием отражения, как он это сделал, но отменил ключи и значения, так что это Словарь, затем напишите функцию, которая обращается к словарю с параметром Color и возвращает имя.

+0

Еще раз спасибо Bennor! Мне нравится ваш первый код части, однако он всегда будет возвращать 0 в качестве результирующей строки, даже если я сделаю clrColor как константу, скажем, как Color.Green, colorName все равно будет «0». не знаю, где пошло не так. – Kevin

+1

Хорошей новостью является то, что вы не сделали ничего плохого.Плохая новость заключается в том, что решение, которое я дал, не будет работать (и ни одно из них не опубликовано до сих пор). Похоже, что можно вернуться обратно к известному цвету (с ToKnownColor), когда цвет был создан из известного цвета в первую очередь. –

+0

звучит сложно для меня, lol, так как у меня нет опыта с отражением, но я попробую, спасибо, Беннор. – Kevin

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

Он говорит о XNA. –

+0

@Bennor: Я не выполнял значительную работу XNA, но не доступен System.Drawing.Color и System.Drawing.KnownColor? Ваш собственный ответ предполагает, что это так. –

+0

Да, есть доступ к ним наверняка, но вам все равно нужно преобразовать из цвета XNA. –

1

Вам нужно будет сначала преобразовать Microsoft.Xna.Framework.Graphics.Color в System.Drawing.Color.

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

Тогда вы получите свое имя (если оно есть) с свойством Name.

+0

Спасибо, но все равно всегда получаю «0» независимо от цвета. – Kevin

Смежные вопросы