先把一个某个应用程序的界面抓下来, 保存成位图; 然后导入该位图并Select进CDC里; 同时直接通过该应用程序的句柄来获取DC, 然后对这2个DC用GetPixel逐点比较, 为什么会不同程度的差别, 分块比较时有时不匹配的点只有几个, 有时却十几个甚至那块区域一半以上的点都是不匹配的?

解决方案 »

  1.   

    如果数据没对齐那就不会出现有时为0的情况了吧?
    把应用程序的界面把全部COPY到一个装有一个CBitmap的DC里误差又少了不少... 哎真不知道怎么搞的
      

  2.   

    我也遇到过这样的问题,觉得有可能是抓图的问题,你是用print screen抓图,然后用windows的“绘图”保存的吗?
      

  3.   

    不应该吧,是不是色深不统一,楼主确定存的是bmp,系统色深?应该是很确定的值啊,系统调到256色再试试?
      

  4.   

    是用print screen抓图,然后用windows的“绘图”保存的...
    但即使对2个同样使用这种方式保存下来的图片进行比较也是差不多的结果, 那这又是为什么呢?
      

  5.   

    几年就发现这个问题了,当时我是用VB做一个“连连看”作弊器(就是按下热键后显示出可以连起来的两个图标啦),为了把游戏窗口上图标的布局输入数组中,以便进一步AI计算,用了最原始的方法,取窗口中特征点与样图对应点进行比较,结果发现个别图标和样图怎么对特征点也对不上。后来回想,可能是系统进行了色彩校正的原因。
      

  6.   

    目前我知道系统进行色彩校正的地方至少有两处:
    1 “显示属性”->“外观”->“效果”选项中有个字体边缘平滑的设置,当然,这个只对文字有效,楼主的情况不在此例;
    2 “显示属性”->“设置”->“高级”标签下也有一个色彩校正的地方,不同的显卡细节也不尽相同,我的机器是845G系列整合显卡,在“Intel(R) Extreme Graphics”标签中,点“图形属性...”按钮,在弹出的窗口中有个“颜色”标签,可以进行色彩Gama值校正。另外,安装Photoshop软件后,在“控制面板”中好象也有个专门的地方可以调整色彩Gama值,两者有异曲同工之处。
    通常,我们不对这里进行设置,默认的校正情况是一条45度的对角斜线,但这不等于系统就什么也不处理,只是尽量忠实地还原色彩(或者说显示出与指定色彩最接近的颜色),所以色彩难免有些出入。
      

  7.   

    谢谢Snow_Ice11111(雪上加冰). 看来要完全匹配是不可能. 我现在采用的方法是给个误差值, 在范围内就认为是匹配的. 但是有时比较结果差别比较大的时候就无能为力了.
    看来得另想办法了
      

  8.   

    使用ATI显卡的朋友这种情况应该会有所改善,采用他们的芯片的显卡色彩还原更真实一直是他们的卖点,有的朋友可以试试。