如何获取图片框中图片上某一点的颜色 如何获取图片框中图片上某一点的颜色?vc6+xp附注:在onctrlcolor中用pDC->getpixel()方法不行。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 CPaintDC dc(this);dc.getpixel(100, 100); 1,用GetDlgItem获得图片框句柄2,再用GetDC获得图片框的设备对象3,再用GetPixel(x,y)活动(x,y)的RGB例子:CWnd *Pwnd=GetDlgItem(ID_PICTURE);CDC *pDC=Pwnd->GetDC();CORLORREF color=pDC->GetPixel(x,y);//获得象素颜色 CWnd *Pwnd=GetDlgItem(ID_PICTURE); CDC *pDC=Pwnd-> GetDC(); CORLORREF color=pDC-> GetPixel(x,y);// 在onctrlcolor中用pDC-> getpixel()方法 不行。-----------------------这个pDC必须是图片框的DC而不是对话框的DC,注意区分 获取颜色用getpixel肯定是行的,至于你无法得到真正的结果,我估计可能是dc用错了,你图片是贴在哪里的?如果你是紧用一个图片框来限定图片的范围,而图片是贴在对话框上的那么就用对话框的dc,如果是贴在图片框上的那么就用图片框的dc,另外还有一点就是去色之前保证图片已经贴出来了;另外一种方法是把图片加载到内存dc中去,然后从内存dc中去色。 我用图片框的DC好像也不好用,不知道为什么。这是我的测试代码: CRect rect, rect1; COLORREF cr; CDC *cdc; HDC hdcScreen; int i=0; GetWindowRect(&rect); GetDlgItem(IDC_BMP)->GetWindowRect(&rect1); cdc = GetDlgItem(IDC_BMP)->GetDC(); cr=cdc->GetPixel(i,i);有的时候读到的是我自己设置的背景色,有的时候是-1.其实,我的整幅图片就一种颜色,能够取到任意一点的颜色就可以了。非常感谢前面网友的参与。期望能够有更好的回答。 问题还没解决吗?直接取窗口DC(this->GetDC),然后GetPixel就可以了。注意要把屏幕坐标转换成窗口内的相对坐标。 前面的方法我也都试过,没有成功,不知道哪里还是有问题,如果有哪位高手能够提供完整的代码就好了。有一个很笨但是肯定好用的方法能够完成取颜色的工作,当然了,前提是你的图片的颜色很简单,而且不是经常改变用颜色一点点试试,比如,估计(8,8)这一点的颜色是RGB(128,128,128),就用该颜色在此处画圆,对比后再修改。应该可以满足要求。 void CTest4Dlg::OnMouseMove(UINT nFlags, CPoint point) { // TODO: Add your message handler code here and/or call default CPoint pt; GetCursorPos(&pt); HDC hDC = ::GetDC(NULL); COLORREF cl = ::GetPixel(hDC, pt.x, pt.y); int red,green,blue; red = GetRValue(cl); green = GetGValue(cl); blue = GetBValue(cl); ::ReleaseDC(NULL, hDC); CDialog::OnMouseMove(nFlags, point);} CInternetSession::OpenURL 异常无法捕获 请大家帮忙推荐一个安装包制作工具,需要制作一个英语安装包 文件夹复制移动问题 编译问题 求助!今天可以帮我写一个程序的高手请进!(急~~~~~~~~~~~~~~) 如何使用消息实现鼠标点击功能? 请问:Windows 2000 Advanced Server,建立套接字最大数量的问题 vc 和 officexp 求组,设计一个搜索字库的软件 怎么把显示“缩略图”方式的list control 中,每一项的文字不显示? GDI+实现按钮的阴影效果--图片附加阴影 利用二叉树写的实数计算器, 请大家提提意见
CPaintDC dc(this);
dc.getpixel(100, 100);
2,再用GetDC获得图片框的设备对象
3,再用GetPixel(x,y)活动(x,y)的RGB
例子:
CWnd *Pwnd=GetDlgItem(ID_PICTURE);
CDC *pDC=Pwnd->GetDC();
CORLORREF color=pDC->GetPixel(x,y);//获得象素颜色
CDC *pDC=Pwnd-> GetDC();
CORLORREF color=pDC-> GetPixel(x,y);//
不行。
-----------------------
这个pDC必须是图片框的DC而不是对话框的DC,注意区分
另外一种方法是把图片加载到内存dc中去,然后从内存dc中去色。
CRect rect, rect1;
COLORREF cr;
CDC *cdc;
HDC hdcScreen;
int i=0;
GetWindowRect(&rect);
GetDlgItem(IDC_BMP)->GetWindowRect(&rect1);
cdc = GetDlgItem(IDC_BMP)->GetDC();
cr=cdc->GetPixel(i,i);
有的时候读到的是我自己设置的背景色,有的时候是-1.
其实,我的整幅图片就一种颜色,能够取到任意一点的颜色就可以了。
非常感谢前面网友的参与。
期望能够有更好的回答。
直接取窗口DC(this->GetDC),然后GetPixel就可以了。注意要把屏幕坐标转换成窗口内的相对坐标。
有一个很笨但是肯定好用的方法能够完成取颜色的工作,当然了,前提是你的图片的颜色很简单,而且不是
经常改变用颜色一点点试试,比如,估计(8,8)这一点的颜色是RGB(128,128,128),就用该颜色在此处
画圆,对比后再修改。应该可以满足要求。
{
// TODO: Add your message handler code here and/or call default
CPoint pt;
GetCursorPos(&pt); HDC hDC = ::GetDC(NULL);
COLORREF cl = ::GetPixel(hDC, pt.x, pt.y);
int red,green,blue; red = GetRValue(cl);
green = GetGValue(cl);
blue = GetBValue(cl); ::ReleaseDC(NULL, hDC);
CDialog::OnMouseMove(nFlags, point);
}