CMFCColorButton、COLORREF、CvScalar 类在MFC中的处理总结

最近在MFC中搭建opencv环境,使用到了颜色管理功能,从CMFCColorButton控件得到的颜色值转换到CvScalar 遇到的一些问题。

CMFCColorButton: 为MFC中MFC color button control控件的类。暂且定义一个变量为color_button与控件关联

COLORREF:为c++中定义为typedef DWORD COLORREF;的变量。定义一个变量为   color_ref

CvScalar :为opencv中使用的颜色变量。定义一个变量为color_scalar


通过CMFCColorButton控件取得之后,使用color_ref= color_button.GetColor();获得控件选择的颜色值

在c++中如何将color_ref值分离出RGB三元色呢?找了好久资料发现,c++提供了三个宏定义:

GetRValue(color_ref)
GetGValue(color_ref)
GetBValue(color_ref)

这三个宏的定义原型为

#define GetRValue(rgb)      (LOBYTE(rgb))
#define GetGValue(rgb)      (LOBYTE(((WORD)(rgb)) >> 8))
#define GetBValue(rgb)      (LOBYTE((rgb)>>16))

三个get宏就可以分别取得R、G、B的值。

再看CvScalar 结构体类型:  color_scalar=cvScalar(GetRValue(color_ref),GetGValue(color_ref),GetBValue(color_ref)); 就可以完成颜色的赋值了。

注意CvScalar的原型为:

typedef struct CvScalar
{
    double val[4];
}
CvScalar;

所以也可以使用val[0-2]进行赋值。

你可能感兴趣的:(CMFCColorButton,COLO)