RGB宏的使用
来源:互联网 发布:浙江省数据库三级 编辑:程序博客网 时间:2024/06/05 20:04
MFC中RGB的宏定义为:(我的教材53页有)
#define RGB(r,g,b) ((COLORREF)(((BYTE)(r)|((WORD)((BYTE)(g))<<8))|(((DWORD)(BYTE)(b))<<16))),这是什么意思呢?
可以使用GetRValue,GetGValue、GetBvalue三个宏来获得32位RGB色的分量值。
#define GetRValue(rgb) (LOBYTE(rgb))
#define GetGValue(rgb) (LOBYTE(((WORD)(rgb)) >> 8))
#define GetBValue(rgb) (LOBYTE((rgb)>>16))
GetRValue直接得到图1的颜色的低字节;
//brush.CreateSolidBrush(c1<<7);
等价于
brush.CreateSolidBrush(RGB(128,127,0));
颜色如下图所示。
#define RGB(r,g,b) ((COLORREF)(((BYTE)(r)|((WORD)((BYTE)(g))<<8))|(((DWORD)(BYTE)(b))<<16))),这是什么意思呢?
r、g、b三个颜色分量都是字节型(BYTE)数据,各占8位。其中,r是一个字节,位于第0~7位;g是一个字节,但是左移了8位,右补8个0,称为一个字(WORD),位于第8~15位 ;b是一个字节,但是左移了16位,后面补16个0,成为双字(DWORD),但b位于16~23,如图1所示。双字空出了一个字节,这个字节a常用于颜色融合,也称RGBA。
图1 RGB内存图
这样,根据内存图,RGB的表示也可以直接采用16进制数表示,如RGB(0,255,128)可以表示为0x80FF。即b分量全色,g分量全色,r分量无色。可以使用GetRValue,GetGValue、GetBvalue三个宏来获得32位RGB色的分量值。
#define GetRValue(rgb) (LOBYTE(rgb))
#define GetGValue(rgb) (LOBYTE(((WORD)(rgb)) >> 8))
#define GetBValue(rgb) (LOBYTE((rgb)>>16))
GetRValue直接得到图1的颜色的低字节;
图2 得到r分量
GetGValue将rgb右移8位,再取低字节。图3 得到g分量
GetBValue将rgb右移16位,再取低字节。图4 得到b分量
RGBA是代表r、g、b和 Alpha的色彩空间。Catmull和Smith在1971至1972年间提出了这个不可或缺的alpha数值,使得alpha渲染变得可能。提出者以alpha来命名是源于经典的线性插值方程C=αA +(1-α)B所用的就是这个希腊字母。C的颜色是A和B颜色的线性组合。alpha通道一般用作不透明度参数。如果一个像素的alpha通道数值为0%,那它就是完全透明的(也就是看不见的),而数值为100%则意味着一个完全不透明的像素(传统的数字图像)。规范的表示法中,r、g、b和 Alpha用0到1的实数表示,RGB宏使用时乘以255。阅读下面的程序。
void CTestView::OnDraw(CDC* pDC)
{
CTestDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return;
// TODO: add draw code for native data here
COLORREF clr=0xFFFFFF;
BYTE c1=GetRValue(clr);
CBrush brush;
#9 brush.CreateSolidBrush(c1<<16);
pDC->SelectObject(&brush);
pDC->Rectangle(100,100,500,500);
}
请问矩形用什么颜色填充?为什么呢?
如果#9语句改为
brush.CreateSolidBrush(c1<<7);
会是什么颜色呢?
答案:
void CTestView::OnDraw(CDC* pDC)
{
CTestDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return;
// TODO: add draw code for native data here
COLORREF clr=0xFFFFFF;
BYTE c1=GetRValue(clr);
CBrush brush;
#9 brush.CreateSolidBrush(c1<<16);
pDC->SelectObject(&brush);
pDC->Rectangle(100,100,500,500);
}
请问矩形用什么颜色填充?为什么呢?
如果#9语句改为
brush.CreateSolidBrush(c1<<7);
会是什么颜色呢?
答案:
//brush.CreateSolidBrush(c1<<7);
等价于
brush.CreateSolidBrush(RGB(128,127,0));
颜色如下图所示。
0 0
- RGB宏的使用
- Windows的RGB宏
- c#中对rgb的使用
- 【iOS】iOS之RGB颜色的使用
- Swift - UIColor使用自定义的RGB配色
- Android中使用自定义RGB的问题
- 基于STM32F429的RGB屏使用
- rgb 宏
- RGB宏
- iOS定义UIColor RGB 的宏
- Android调色板的开发与RGB颜色的使用
- 使用RGB设置UIColor
- libjpeg 的使用sample RGB转换到JPEG
- SWT应用之:随机RGB颜色、ScrolledComposite控件的使用
- 开发中推荐使用的几种颜色RGB值
- libjpeg 的使用sample RGB转换到JPEG
- UCGUI使用的24位颜色RGB数值对照表
- 使用OpenCV实现RGB、HSI、CMYK颜色空间的转换
- LRU Cache
- redis pipe 批量导入数据
- 5.2 快速路径处理
- chanson:Ta fete 翻译
- 学院教务处公告
- RGB宏的使用
- 各大游戏公司面经笔试题汇总(资源来自网络)(实时更新)
- 计算机图形学中“窗口”与“视区”的演示
- C++学习笔记:静态数组和动态数组
- 欢迎国内计算机图形学教师加入“计算机图形学教师群”
- 省级教学成果一等奖答辩稿
- “计算机图形学”实践教学资源库的设计与建设
- 钻石恒久远,一颗永相传
- 从线框模型到表面模型绘制技术的联想