0

我正在尝试从 Xaml 字符串解析 LinearGradientBrush,没有任何问题我使用ColorConverter.ConvertFromString普通文本或 html 颜色转换。

最近我遇到了一些使用 ScRGB 格式"sc#scA, scR, scG, scB"从 Adob​​e Illustrator 解析为 Expression Blend 的颜色。这似乎破坏了 ColorConverter,因为结构中的ScAColor似乎解析了错误的值;例如 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)吗?有解决方法吗?有没有人有一个干净的修复?

4

1 回答 1

1

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

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

于 2012-04-25T14:10:19.463 回答