工控编程吧
标题:
129上位机VC MFC获取图片任意位图的颜色值
[打印本页]
作者:
qq263946146
时间:
2015-12-28 21:34
标题:
129上位机VC MFC获取图片任意位图的颜色值
(, 下载次数: 0)
上传
点击文件名下载附件
129上位机VC MFC获取图片任意位图的颜色值
功能展示
一幅图片,不同位置上的颜色各有不同不如何获取图片上任意位置的颜色值?我们当前例程实现了这一功能,当鼠标移动到位图上,鼠标侧边显示颜色值,且将颜色直充到右侧矩形中,效果如图;
要点提示
图片的获取,首先要获取鼠标所在窗口的CDC设备上下文,然后通过此类的函数GetPixel便可快速获取, RGB的各个值可以通过GetRValue()GetGValue() GetBValue()三个函数分别获取;
实现功能
1.新建基于对话框的应用程序
2.给工程加入一位图,用于测试用;
添加一图片控件,修改下默认ID为IDC_BMP,设置其类型为位图,位图ID为我们添加的位图ID;
添加一图片控件,修改下默认ID为IDC_COLOR用于显示获取的颜色效果;
添加一文本控件,修改下默认ID为IDC_TEXT,用于显示获取颜色的RGB值;
3.添加鼠标移动消息,实现颜色的获取与显示
void CGkbc8Dlg::OnMouseMove(UINT nFlags, CPoint point)
{
CDialog::OnMouseMove(nFlags, point);
if(GetDlgItem(IDC_BMP) == ChildWindowFromPoint(point))
{
CDC* pDC = GetDlgItem(IDC_BMP)->GetDC();
MapWindowPoints(GetDlgItem(IDC_BMP),&point,1);//坐标点转换为控件上坐标
COLORREF Color;
Color = pDC->GetPixel(point);//获取控件上点point的颜色值
int r,g,b;
r = GetRValue(Color);
g = GetGValue(Color);
b = GetBValue(Color);
复制代码
CString sText;
sText.Format("R:%d,G:%d,B:%d",r,g,b);
CDC *pDCText = GetDlgItem(IDC_TEXT)->GetDC();
CSize sz = pDCText->GetTextExtent(sText);
GetDlgItem(IDC_TEXT)->SetWindowText(sText);
GetDlgItem(IDC_TEXT)->SetWindowPos(&wndTop ,point.x+20,point.y+20,sz.cx,sz.cy,
SWP_SHOWWINDOW);
//>< 填充矩形
CRect rc;
GetDlgItem(IDC_COLOR)->GetClientRect(rc);
CDC* pDCColor = GetDlgItem(IDC_COLOR)->GetDC();
CBrush Brush(RGB(r,g,b));
pDCColor->FillRect(rc,&Brush);
//
GetDlgItem(IDC_COLOR)->ReleaseDC(pDCColor);
GetDlgItem(IDC_BMP)->ReleaseDC(pDC);
GetDlgItem(IDC_TEXT)->ReleaseDC(pDCText);
}
else
GetDlgItem(IDC_TEXT)->ShowWindow(SW_HIDE);//隐藏文本窗口
}
复制代码
我们来演示下功能实现的整个过程
[iqiyi]http://player.video.qiyi.com/2e0fed55ddda071a1bcc7bb6bbd39672/0/0/w_19rtd0lke5.swf-albumId=5102197009-tvId=5102197009-isPurchase=0-cnId=12[/iqiyi]
(, 下载次数: 0)
上传
点击文件名下载附件
[note]1[/note]
欢迎光临 工控编程吧 (https://www.gkbc8.com/)
Powered by Discuz! X3.4