OnLButtonDown()
{
CDC *pDC = new CDC();
CDC *dc = GetDC();
pDC->CreateCompatibleDC(dc); //以下画图函数均使用彩色
pDC->FillSolidRect(........);
pDC->SetPixelV(........);
...
...
... //等画图函数 dc->StretchBlt(0,0,200,200,pDC,0,0,100,100,SRCCOPY);
// 到此, 图像变成黑白的了.
ReleaseDC(dc);
}
//--------------- 请高手帮忙! --------------------
解决方案 »
- 绘图软件图元选择
- 关于LISTVIEW图表的问题.
- 我在网上看到一个outlookbar的例子,我照搬下来为什么不行呀
- vs2008下编译的MFC程序如何才能禁止可视化效果??
- 大量文件的异步写入的问题
- ***疑难问题,win2k中用远程线程注入我的dll到winlogon.exe中,建立全局钩子失败?***
- vc,accesse ,odbc,在打开数据库时出错???
- 问一个简单的关于文档程序的问题
- 当OPengl遇到VC,窗口的客户区不能保证全部被opengl绘制,为什么?
- 紧急!用DOMODAL调用一个对话框后无法响应事件
- 彩色直线的反走样,如何实现?
- 工具条按钮的图标可否通过复制现成的图标图像上去?省得一个个点去点画
RGB( GetRValue( clr ) * 0.3, GetGValue( clr ) * 0.59, GetBValue( clr ) * 0.11 )其中,clr为彩色值,生成的新值为一定灰度的黑白色。
int c = GetRValue( clr ) * 0.3, GetGValue( clr ) * 0.59, GetBValue( clr ) * 0.11;
COLORREF clrNew = RGB( c, c, c );
COLORREF clrNew = RGB( c, c, c );
怎么都是c啊?
就好像0,0,0是黑,128,128,128是灰,255,255,255是白一样,
你可以试试,R、G、B相同的色彩一定是个灰度值。
|U|=| a b c |* |G|
|V| | d e f | |B| (其中a+b+c=0 d+e+f=0 Y表示亮度 U V 表示色彩 色调 )
首先算得Y=0.299*R+0.587*G+0.114*B 得到该点对应的亮度Y
然后令R=G=B=Y,这样U V都为零,这样就屏蔽了图像的色彩信息 只保留了亮度信息
是一副灰度范围在0-255之间的灰度图
这其实就是彩色图转换为灰度图的原理(有三种:最大值法 平均值法 加权法)