一小段获得颜色的代码,看得莫名奇妙,大家帮帮忙看看啊!

gerry2000 2006-01-22 03:35:15
COLORREF c[4],sysColor,drawColor;
c[0] = pDC->GetPixel(rc.left-2,rc.top-2);
c[1] = pDC->GetPixel(rc.left-2,rc.bottom+2);
c[2] = pDC->GetPixel(rc.right+2,rc.bottom+2);
c[3] = pDC->GetPixel(rc.right+2,rc.top-2);

int i,tmp,max,rec=0;
max = (BKCOLOR>>16&0xff)*(c[0]>>16&0xff);
max += (BKCOLOR>> 8&0xff)*(c[0]>> 8&0xff);
max += (BKCOLOR>> 0&0xff)*(c[0]>> 0&0xff);

for(i=1;i<4;i++)
{
tmp = (BKCOLOR>>16&0xff)*(c[i]>>16&0xff);
tmp += (BKCOLOR>> 8&0xff)*(c[i]>> 8&0xff);
tmp += (BKCOLOR>> 0&0xff)*(c[i]>> 0&0xff);
if (tmp<max) { max=tmp; rec=i; }
}
sysColor = c[rec];
drawColor = sysColor^3;

//////////
我实在看不懂了,请大家帮帮忙,谢谢~
...全文
218 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
gerry2000 2006-01-22
  • 打赏
  • 举报
回复
drawColor = sysColor^3
===============
这里也不太懂,它与3异或有什么用?
gerry2000 2006-01-22
  • 打赏
  • 举报
回复
我可能知道了,我认为应该是这样:
四点颜色与背景颜色BKCOLOR跌加,这也许是“*”号的作用吧。
然后把各点的灰度值求和,选灰度值最小的给sysColor;

希望大家能指正。
gerry2000 2006-01-22
  • 打赏
  • 举报
回复
谢谢,那中间的“*”号有什么用啊?

////////////////////
已知其中有#define BKCOLOR (RGB(202,165,216))
feeboby 2006-01-22
  • 打赏
  • 举报
回复
是rgb ,说错了
不好意思
vcmute 2006-01-22
  • 打赏
  • 举报
回复
>>0 & 0xff 同 GetRValue
#define GetRValue(rgb) ((BYTE)(rgb))

>>8 & 0xff 同 GetGValue
#define GetGValue(rgb) ((BYTE)(((WORD)(rgb)) >> 8))

>>16 & 0xff 同 GetBValue
#define GetBValue(rgb) ((BYTE)((rgb)>>16))
gerry2000 2006-01-22
  • 打赏
  • 举报
回复
谢谢 arb值是什么啊?
程序这个是获得系统的四点的背景色,然后灰度化,但我不知道为什么要这么做?
feeboby 2006-01-22
  • 打赏
  • 举报
回复
把arb值转换成某个评价标准吧
这断代码是求出对某个评价标准最大那个象素的坐标再画出来
gerry2000 2006-01-22
  • 打赏
  • 举报
回复
max = (BKCOLOR>>16&0xff)*(c[0]>>16&0xff);
max += (BKCOLOR>> 8&0xff)*(c[0]>> 8&0xff);
max += (BKCOLOR>> 0&0xff)*(c[0]>> 0&0xff);

=================
这到底是要干嘛呀?
feeboby 2006-01-22
  • 打赏
  • 举报
回复
哪个地方不懂

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧