首页 > 解决方案 > 如何从 MFC 中的 COLORREF 中提取 RGB 值?

问题描述

实际上,我正在尝试从 COLORREF 中提取 RGB 值,但没有得到 0 到 255 范围内的值。相反,我总是得到一些字符串。例如:0000017153665268 我使用了以下方法:

    COLORREF obj_Colorref = obj_CColorDialog.GetColor();
    RGBTRIPLE rgb;
    rgb.rgbtRed = GetRValue(obj_Colorref);
    rgb.rgbtGreen = GetGValue(obj_Colorref);
    rgb.rgbtBlue = GetBValue(obj_Colorref);

    CString sRed;
    CString sGreen;
    CString sBlue;
    sRed.Format(L"%d", rgb.rgbtRed);
    sGreen.Format(L"%d", rgb.rgbtGreen);
    sBlue.Format(L"%d", rgb.rgbtBlue);
    std::ofstream file;
    file.open("..//Projects//Ribbon//x64//color.txt");
    file << "#"<<"\n"<<"#"<< sRed << ",";
    file << sGreen << ",";
    file << sBlue << ",";

请帮帮我。

标签: c++mfcrgb

解决方案


问题在于:

file << "#"<<"\n"<<"#"<< sRed << ",";
file << sGreen << ",";
file << sBlue << ",";

wchar_t它基于基于CString-char的流打印。

wchar_t*不作为字符串打印到basic_ostream<char>.

最简单的修复方法可能是CString完全避免:

file << std::to_string((int)rgb.rgbtBlue) << ",";

甚至可能:

file << (int)rgb.rgbtBlue << ",";

推荐阅读