ColorConverter 在解析 ScRGB 时失败

本文关键字:失败 ScRGB ColorConverter | 更新日期: 2023-09-27 18:32:16

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

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

ColorConverter 在解析 ScRGB 时失败

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

你需要使用 ColorConverter.ConvertFrom() 重载,它接受 CultureInfo 引用。 传递文化信息.不变文化。 或者以某种方式将Adobe工具放在头上,以便生成正确本地化的字符串。