如何在内存DC中调用GetPixel获取像素点颜色值.docx

如何在内存DC中调用GetPixel获取像素点颜色值.docx

  1. 1、本文档共4页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
如何在内存DC中调用GetPixel获取像素点颜色值

如何在内存DC中调用GetPixel获取像素点颜色值?由于文字背景色为白色,前景色为黑色,于是我在窗口中间绘制了16 * 16的单元格:1、使用客户区域的窗口DC来绘图(在窗口中显示出来)?? A、左边白色为绘图区域,在左上角输出了一个“鲁”字;?? B、再使用GetTextExtentPoint32函数可以得出该文字为16 * 16像素大小;?? C、最后使用GetPixel函数取出每个像素点的颜色值,来填充左窗口中对应的表格。?? 单元格的填充方法:根据左上角(最小的)“鲁”字每个像素点的颜色值,来对应填充这里单元格的颜色;?? 该点阵的计算方法:每个像素点用1bit表示(0表示黑,1表示白),于是这个字号的鲁字就占了16 * 16 / 2 = 32字节???????????????????? 按横向取,因为8bit/字节嘛,也就是一个字节要横向取8个像素点。?? 如下图所示:??这个方法的缺点就是DLL模块中必须要使用一个窗口句柄,然后把文字画上去再取出像素点,所以这方法欠妥。便想到了下面的方法:先创建一个虚拟DC,然后再创建一个内存DC,在内存DC中使用TextOut,但用GetPixel时,老是返回CLR_INVALID,而MSDN中一段解释也没有看明白,它说并不是所有DC都支持GetPixel,必须调用GetDeviceCaps来获取详情(在BD、GG许久后,这个API始终没看懂到底有什么用)?2、使用内存DC来输出图形?? A、创建虚拟DC,再创建一个兼容的内存DC,再TextOut输出文字;(我将DC载入HBITMAP,发现全为背景的黑色)?? B、再使用GetTextExtentPoint32函数可以得出该文字为16 * 16像素大小;(大小能获取到)?? C、最后使用GetPixel函数取出每个像素点的颜色值,来填充左窗口中对应的表格。(这里GetPixel失败)??? 相关伪代码如下:?#include windows.h#pragmacomment(lib,user32.lib)int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR pszCmdLine, intcmdShow){// create a virtual dc to draw elements.HDC hdcScreen = CreateDC(DISPLAY, NULL, NULL, NULL); HDC hdcCompatible = CreateCompatibleDC(hdcScreen);CStringm_strText = _T(Hello); SIZE m_sz;if(hdcCompatible == NULL) {MessageBox(NULL,_T(CreateCompatibleDC Failed !),NULL,NULL);return NULL; }// then set the text color is black,the back color is white.SetBkColor(hdcCompatible,RGB(255,255,255));SetTextColor(hdcCompatible,RGB(0,0,0));// draw the text int a virtual dc.TextOut(hdcCompatible,0,0,m_strText,m_strText.GetLength());// get the text width and height.GetTextExtentPoint32(hdcCompatible,m_strText,m_strText.GetLength(),m_sz);// get the pixel infomation.for(inti=0; im_sz.cx; i++) {for(int j=0; jm_sz.cy; j++) { COLORREF color = GetPixel(hdcCompatible,i,j);if(color == CLR_INVALID) {TRACE(call GetPixel Failed !\r\n); }elseif(color == RGB(255,255,255) {// Set the bit is 0. }else {// Set the bit is 1. } } }}这里的color变量一直都是0x00FFFFFF(背景色),困扰半个月的问题了,希望有空的兄弟帮忙看看这个问题如何解决,或者有更好的方法,不盛感激!

文档评论(0)

hhuiws1482 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:5024214302000003

1亿VIP精品文档

相关文档