你的位置:
问答吧
-> VC
-> 问题详情
如何取一个像素点的RGB颜色值?
GDI方面的很少接触,现在项目需求硬着头皮上了!
以下的代码调试了好久,一直没有找到原因,请路过的大牛不惜赐教!
伪代码如下:
C/C++ code
classCTestDlg :publicCDialog
{public://......public:voidTextOutPut(CString str,
HFONT hNew,
HFONT&hOld,
SIZE&szt)
{
CClientDC dc(this);//设置背景色、字体颜色、模式GetWindowRect(&rt);
dc.SetBkColor(RGB(255,255,255));
dc.SetTextColor(RGB(0,0,0));
dc.SetBkMode(TRANSPARENT);
dc.SetMapMode(MM_TEXT);//输出文字hOld=(HFONT)::SelectObject(dc,hNew);
dc.TextOut(0,0,str);//这里可以得到的szt为 32*33GetTextExtentPoint32(dc,str,str.GetLength(),&szt);
COLORREF cr;
POINT pt;//开始遍历32 * 33的每个像素点颜色RGB值for(inti=0; i
{for(intj=0; j
{
pt.x=j;
pt.y=i;
cr=dc.GetPixel(pt);if(RGB(255,255,255)==cr)
{
CString str;
str.Format("当前像素:x=%d y=%d 的点为白色!",j,i);
TRACE(str);
}elseif(RGB(0,0,0)==cr)
{
CString str;
str.Format("当前像素:x=%d y=%d 的点为白色!",j,i);
TRACE(str);
}
}
}
}
};
作者: wangningyu
发布时间: 2010-09-06
http://kongfanmings.download.csdn.net/user/kongfanmings/all/2我最近也在搞这些,不过也是一知半解,现在我的程序有些眉目了 我下载资源有些东西给了我启发,我已经把分数设为0 你可以去下来看看,看能不能帮助你,上面就是连接了
作者: kongfanmings
发布时间: 2010-09-06
怎么两个都是 点为白色
作者: cxaa21
发布时间: 2010-09-06
C/C++ code
/************************************************************************//*取色*//************************************************************************/voidCMyDIPView::OnRgb()
{inti,j;
unsignedchar*lpSrc;
CMyDIPDoc*pDoc=GetDocument();
ASSERT_VALID(pDoc);if(pDoc->m_hDIB==NULL)return;
LPSTR lpDIB=(LPSTR) ::GlobalLock((HGLOBAL) pDoc->m_hDIB);intcxDIB=(int) ::DIBWidth(lpDIB);//Size of DIB - xintcyDIB=(int) ::DIBHeight(lpDIB);//Size of DIB - yLPSTR lpDIBBits=::FindDIBBits (lpDIB);//计算图像每行的字节数longlLineBytes=WIDTHBYTES(cxDIB*8);
HDC hDC=::GetDC(m_hWnd);
COLORREF clr ;char*psz=newchar[cxDIB*cyDIB*12+1];char*p=psz;for(i=0; i
{for(j=0; j
{
clr=::GetPixel(hDC,i,j);
sprintf(p,"%02x%02x%02x00",GetRValue(clr),GetGValue(clr),GetBValue(clr));
m_strRGB+=p;
}
}
delete psz;
AfxMessageBox("取色完毕!!");
::GlobalUnlock((HGLOBAL) pDoc->m_hDIB);
Invalidate(TRUE);
}
这是我个人的取色函数也是参考我找的东西的
作者: kongfanmings
发布时间: 2010-09-06
没完全明白你要做成什么样子!!也不知道你问题是什么!!哪里出问题了
GetPixel()这个函数是指定点的RGB值
作者: hoosean
发布时间: 2010-09-06
引用 1 楼 kongfanmings 的回复:
http://kongfanmings.download.csdn.net/user/kongfanmings/all/2我最近也在搞这些,不过也是一知半解,现在我的程序有些眉目了 我下载资源有些东西给了我启发,我已经把分数设为0 你可以去下来看看,看能不能帮助你,上面就是连接了
这个链接已无法下载,能否发一份到邮箱,多谢!
koma0769@vip.qq.com
作者: wangningyu
发布时间: 2010-09-06
GetPixel()
作者: stonewater
发布时间: 2010-09-06
引用 4 楼 hoosean 的回复:
没完全明白你要做成什么样子!!也不知道你问题是什么!!哪里出问题了
GetPixel()这个函数是指定点的RGB值
这个像素点的RGB值为CLR_INVALID,说明获取失败!
Return Values
The return value is the RGB value of the pixel. If the pixel is outside of the current clipping region, the return value is CLR_INVALID.
作者: wangningyu
发布时间: 2010-09-06
引用 5 楼 wangningyu 的回复:
引用 1 楼 kongfanmings 的回复:
http://kongfanmings.download.csdn.net/user/kongfanmings/all/2我最近也在搞这些,不过也是一知半解,现在我的程序有些眉目了 我下载资源有些东西给了我启发,我已经把分数设为0 你可以去下来看看,看能不能帮助你,上面就是连接了
这个链接已无法下载,能否发一份到邮箱,多谢!
……
已发 注意查收
作者: kongfanmings
发布时间: 2010-09-06
确实有点没搞懂楼主意思,GetPixel不行么?
作者: jack54877012
发布时间: 2010-09-06
比如一个汉字白底黑字、获取到像素值为32 * 32
那么我想遍历该汉字的每个像素点颜色,判断是不是黑色,还是白色...
作者: wangningyu
发布时间: 2010-09-06
GetPixel()
作者: hucailai
发布时间: 2010-09-06
现在的问题是GetPixcel调用失败了,说明我的点坐标获取有问题!
问题是上面的代码,有什么问题吗?
作者: wangningyu
发布时间: 2010-09-06