0

我目前正在WinRT用 C++ 编写一些组件,我需要弄清楚如何获取颜色字符串(例如 "#FF448DCA" )并将其转换为 aColor以用于构造 a SolidColorBrush

WPF我们有BrushConverter,但我们似乎没有等价物WinRT

我可以C#通过拆分字符串,转换为十六进制块等来做到这一点,但这超出了我目前的C++技能。

在我花大量时间尝试解决之前,有没有人有一个快速的答案(我的 C++ 会改进,但我的交易线会受到影响)

谢谢

4

3 回答 3

1

这是一个简短的示例,如何使用正则表达式完成此操作,使用 vs 2010 express 编写。这只是解析,稍后使用 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

Unfortunately you'll need to convert it to discrete byte values.

Once you have those you use the ColorHelper class (http://msdn.microsoft.com/en-us/library/windows/apps/hh747822.aspx) to convert them into a Color structure (there isn't a Color.FromArgb method in 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 回答