0

Xaml 文字列から LinearGradientBrush を解析しようとしていますがColorConverter.ConvertFromString、通常のテキストまたは html の色変換に問題なく使用しています。

最近、ScRGB フォーマット"sc#scA, scR, scG, scB"を使用して、Adobe Illustrator から Expression Blend に解析されたいくつかの色に出会いました。ScA構造体からColorの値が値を間違って解析しているように見えるため、それは ColorConverter を壊しているようです。たとえば、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

あなたは文化の問題を抱えています。明らかに、浮動小数点値の小数点がピリオドではなくコンマである世界の一部に住んでいます。ただし、色の文字列はピリオドでフォーマットされています。そのため、値が float に変換されると、文字列内のピリオドが小数点ではなく千単位の区切り記号として認識されます。そして、「0117647059」は確かに 1,176471e8 です。

ColorConverter.ConvertFrom() オーバーロードを使用する必要があります。CultureInfo 参照を受け入れます。CultureInfo.InvariantCulture を渡します。または、適切にローカライズされた文字列を生成するように、何らかの方法で Adob​​e のツールを叩きます。

于 2012-04-25T14:10:19.463 に答える