0

現在、C ++でいくつかのコンポーネントを記述していWinRTますが、Color文字列(「#FF448DCA」など)を取得して、Colorを構築するためにに変換する方法を理解する必要がありSolidColorBrushます。

WPF私たちは持っていましたが、BrushConverter私たちは同等のものを持っていないようですWinRT

文字列を分割したり、16進チャンクに変換したりすることでそれを行うことができますが、それは私の現在のスキルC#を超えています。C++

私がそれを解決しようと多くの時間を費やす前に、誰かが迅速な答えを持っていますか(私のC ++は改善されますが、私の取引は苦しみます)

ありがとう

4

3 に答える 3

1

これは、vs2010expressで記述された正規表現を使用してこれを行う方法の簡単な例です。これは解析中です。後でMarcが書いたようにColorHelperを使用してください。

#include <string>
#include <regex>

bool GetARGBFromS(const std::string& s, int& a, int& r, int& g, int& b) {   
    try {
        std::smatch m;
        if ( regex_search(s, m, std::regex("#([0-9A-Fa-f]{2})([0-9A-Fa-f]{2})([0-9A-Fa-f]{2})([0-9A-Fa-f]{2})")) ) {
            a = std::stoi(m[1].str(), 0, 16);
            r = std::stoi(m[2].str(), 0, 16);
            g = std::stoi(m[3].str(), 0, 16);
            b = std::stoi(m[4].str(), 0, 16);
        }   
        else
            return false;
    }
    catch(...){ /*should catch/report specific exceptions, but thats just example*/ return false; }
    return true;
}

int main() {

    int a,r,g,b;
    if ( GetARGBFromS("#FF448DCA", a, r, g, b) )
    {}

    return 0;
}
于 2012-08-29T13:08:35.087 に答える
0

残念ながら、それを個別のバイト値に変換する必要があります。

それらを取得したら、ColorHelperクラス(http://msdn.microsoft.com/en-us/library/windows/apps/hh747822.aspx)を使用してそれらをColor構造に変換します(Color.FromArgbはありません)。 C ++のメソッド)。

于 2012-08-29T12:50:29.080 に答える
0

これが私のやり方です。

        public static Brush ColorToBrush(string color)
    {
        color = color.Replace("#", "");
        if (color.Length == 6)
        {
            return new SolidColorBrush(ColorHelper.FromArgb(255,
                byte.Parse(color.Substring(0, 2), System.Globalization.NumberStyles.HexNumber),
                byte.Parse(color.Substring(2, 2), System.Globalization.NumberStyles.HexNumber),
                byte.Parse(color.Substring(4, 2), System.Globalization.NumberStyles.HexNumber)));
        }
        else
        {
            return null;
        }
    }

電話で

textbox1.BorderBrush = ColorToBrush("#ffff00");
于 2016-02-09T15:33:12.050 に答える