ColorConverter在解析ScRGB时失败

时间:2012-04-25 13:27:02

标签: c# colors string-conversion

我试图从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上)?有解决方法吗?有人有清洁修复吗?

1 个答案:

答案 0 :(得分:1)

你有文化问题。显然,您生活在世界的一个地方,浮点值中的小数点是逗号而不是句点。但是您的颜色字​​符串使用句点格式化。因此,当值转换为float时,它会将字符串中的句点视为千位分隔符,而不是小数点。而“0117647059”的确是1,176471e8。

您需要使用ColorConverter.ConvertFrom()重载,它接受CultureInfo引用。通过CultureInfo.InvariantCulture。或者以某种方式敲击头部的Adobe工具,以便生成正确的本地化字符串。