COLORREF,COLOR,RGB,CStringの転化総括分析
rgb(r,g,b)=整数値=r+g*256+b*255*256
COLORREFは32ビット整数値で、色を表しています.RGB関数を使用してCOLORREFの定義typedef DWORD COLORREFを初期化できます.
COLORREF変数には、第1のCOLORREF cf=RGB(,);第2種
CColorDialog colorDialog;
COLORREF color;
if( colorDialog.DoModal() == IDOK )
{
color = colorDialog.GetColor();
}
このコードはMFCの色ダイアログを使用しています
COLORREFからRGB成分値を取り出すにはどうすればいいですか?マクロGetRValue GetGValue GetBValueを使用できます
彼らの定義は以下のとおりである.define GetRValue(rgb)#define GetGValue(rgb)((BYTE)(((WORD)>>8))
#define GetBValue(rgb) ((BYTE)((rgb)>>16))
二、ColorとColorRef(intタイプが表す色)の相互変換実際のソフトウェア開発において、非を用いることが多い.Netプラットフォームのコード.このときColorRef(つまりintタイプで表される色値またはDWORD値で表される色)に遭遇する可能性があります.これとNetプラットフォームの下の色の相互変換MSは直接実現されていない.では、私たちが自分で処理する必要があります.ここでは2つの関数を示します.
uint GetCustomColor(Color color)
{
int nColor = color.ToArgb();
int blue = nColor & 255;
int green = nColor >> 8 & 255;
int red = nColor >> 16 & 255;
return Convert.ToUInt32(blue << 16 | green << 8 | red);
}
Color GetArgbColor(int color)
{
int blue = color & 255;
int green = color >> 8 & 255;
int red = color >> 16 & 255 ;
return Color.FromArgb(blue, green, red);
}
注:COLORREFの色の配列はBGRで、Colorを通ります.ToArgb()で得られた数値における色配列はAARRGBBである
三、注意
CColorDialog dlg;
if(dlg.DoModal() == IDOK)
{
//m_FillColor = dlg.GetColor();
COLORREF ctmpColor = dlg.GetColor();
Color tmpColor;
tmpColor.SetFromCOLORREF(ctmpColor);
ARGB argb = Color::MakeARGB(m_nFillTran, tmpColor.GetR(),tmpColor.GetG(),tmpColor.GetB());
//Graphics graphics(pDC->m_hDC);
//HatchBrush hBrush(HatchStyleDashedHorizontal,Color(100,255,0,0), Color(argb));
tmpColor = argb;
m_FillColor = tmpColor.ToCOLORREF();
//m_FillColor = RGB(Color(argb));
}
これはapi関数で書かれたColorrefとcolorの直線間の変換です.
////////////////////////////////////////////////////////////////////
COLORREFと文字間の変換1、文字列のフォーマット機能が強い
int iRed = GetRValue(pMarkInfo->lfColor);
int iGreen = GetGValue(pMarkInfo->lfColor);
int iBlue = GetBValue(pMarkInfo->lfColor);
CString szColor;
szColor.Format(_T("#%02X%02X%02X"), iRed, iGreen, iBlue);
/////////////////////////////////////////////////////
CString m_BackColor.m_frame_color = "#0290D8";
DWORD r,g,b;
sscanf(m_BackColor.m_frame_color,"#%2X%2X%2X",&r,&g,&b);
COLORREF rgb = RGB(r,g,b);
brush.CreateSolidBrush (rgb)
//////////////////////////////////////////////////
//COLORREF
BOOL CDataManager::GetRGBText(std::string &strRGBText , COLORREF color)
{
//COLORREF col = RGB( 255 , 12 , 4);
BYTE Red = GetRValue(color); ///
BYTE Green = GetGValue(color); ///
BYTE Blue = GetBValue(color); ///
char chR[4];
itoa(Red ,chR , 10 );
char chG[4];
itoa(Green , chG , 10);
char chB[4];
itoa(Blue , chB , 10);
std::string strR , strG, strB;
strR = chR ;
strG = chG;
strB = chB;
strRGBText = strR + "," + strG + "," + strB;
return TRUE;
}
// COLORREF, ("32","34","21")
BOOL CDataManager::GetColorRGB(CString strColorText , COLORREF& color)
{
char chR[4] = "", chG[4] = "", chB[4] = "";
sscanf( strColorText, "%[^,],%[^,],%[^,]", chR, chG, chB);
color = RGB(atoi(chR), atoi(chG), atoi(chB));
return TRUE;
}
///////////////////////////////////////////////////////
http://www.jb51.net/article/41396.htm