我试图从Xaml字符串解析LinearGradientBrush,没有任何问题我使用ColorConverter.ConvertFromString
进行普通文本或html颜色转换。
最近,我发现了一些使用ScRGB格式"sc#scA, scR, scG, scB"从Adobe Illustrator解析为Expression Blend的颜色。这似乎打破了ColorConverter,因为ScA
结构中的Color
值似乎解析了错误的值;例如,0.2变为2,0.5变为5.
我的代码相当简单:
string colorStr = "sc#0.117647059, 0, 0, 0";
Color color = (Color)ColorConverter.ConvertFromString(colorStr);
Console.WriteLine(color.ScA);
输出:1,176471E + 08,预期:0,1176471
这是.NET Framework中的错误(我在4上)?有解决方法吗?有人有清洁修复吗?
答案 0 :(得分:1)
你有文化问题。显然,您生活在世界的一个地方,浮点值中的小数点是逗号而不是句点。但是您的颜色字符串使用句点格式化。因此,当值转换为float时,它会将字符串中的句点视为千位分隔符,而不是小数点。而“0117647059”的确是1,176471e8。
您需要使用ColorConverter.ConvertFrom()重载,它接受CultureInfo引用。通过CultureInfo.InvariantCulture。或者以某种方式敲击头部的Adobe工具,以便生成正确的本地化字符串。