Как конвертировать цвет обратно из строки? - PullRequest
1 голос
/ 17 января 2012

Я сохраню Цвет как

colorObj.ToString ()

Затем он будет сохранен как Цвет [A = 255, R = 255, G = 255, B = 128]

Теперь Как преобразовать эту строку обратно в цвет?

Я уже решаю проблему, сохраняя RGB в целочисленном значении, но это значение является отрицательным и не имеет значения, пока кто-то не применяет его из кода.Эти [A = 255, R = 255, G = 255, B = 128] значения ARGB более читабельны.

Ответы [ 4 ]

4 голосов
/ 17 января 2012

Вы можете сохранить (и загрузить) цвет в виде значений HTML, например #FFDFD991.Затем используйте System.Drawing.ColorTranslator.ToHtml() и System.Drawing.ColorTranslator.FromHtml().Также см. этот вопрос .

1 голос
/ 24 февраля 2015

Воспроизведение ответа Jontata - вот что я придумал.

Это хорошее решение для пользователей Unity, так как для него не требуется библиотека чертежей.Я просто делаю свою собственную функцию ToString для простого преобразования.

Функции:

public static string colorToString(Color color){
    return color.r + "," + color.g + "," + color.b + "," + color.a; 
}
public static Color stringToColor(string colorString){
    try{
        string[] colors = colorString.Split (',');
        return new Color (float.Parse(colors [0]), float.Parse(colors [1]), float.Parse(colors [2]), float.Parse(colors [3]));
    }catch{
        return Color.white;
    }
}

Использование:

Color red = new Color(1,0,0,1);
string redStr = colorToString(red);
Color convertedColor = stringToColor(redStr); //convertedColor will be red
0 голосов
/ 16 февраля 2015

Если вы сначала конвертируете Color в Int через ColorTranslator.ToWin32 (Цвет win32Color) а затем конвертировать этот Int в строку, а затем просто преобразовать его обратно в Int, и этот int обратно в цвет через ColorTranslator.FromWin32 (Цвет win32Color)

//
Color CColor = Color.FromArgb(255, 20, 200, 100);
int IColor;
String SString;
//from color to string    
IColor = ColorTranslator.ToWin32(CColor);
SString = IColor.ToString();
//from string to color    
IColor = int.Parse(SString);
CColor = ColorTranslator.FromWin32(IColor);
0 голосов
/ 17 января 2012

Не очень элегантным решением может быть разбиение строки и извлечение нужных значений.Что-то вроде:

var p = test.Split(new char[]{',',']'});

int A = Convert.ToInt32(p[0].Substring(p[0].IndexOf('=') + 1));
int R = Convert.ToInt32(p[1].Substring(p[1].IndexOf('=') + 1));
int G = Convert.ToInt32(p[2].Substring(p[2].IndexOf('=') + 1));
int B = Convert.ToInt32(p[3].Substring(p[3].IndexOf('=') + 1));

Должны быть лучшие способы сделать это, хотя, это было первое, что пришло на ум.

...