想用GetPixel检测区域图形是否发生变化,代码应该正确的,但是一直找不出错误,无论怎么样,得出的结果都是“未变化”
//想检测一块方形区域的图形是否发生变化
//用来存放颜色的数组,区域大小40*40
COLORREF original[41][41];
//x,y是坐标变量,x0,y0是区域的左上角的点(原点),w是区域的长
int x=x0,y=y0,w=40;
//开始赋初值(横向)
for(int i1=1;i1<w+1;i1++)
{
    for(int j1=1;j1<w+1;j1++)
    {
original[j1][i1]=GetPixel(hdc,x,y);
x=x+1;
    }
    y=y+1;
}
//等待图形发生变化
Sleep(8000);
//相同像素的数量
int same=0;
x=x0,y=y0;
////开始判断(横向)
for(int i2=1;i2<w+1;i2++)
{    for(int j2=1;j2<w+1;j2++)
    {
        //检验该点的像素值是否等于之前记录的
        if(original[j2][i2]==GetPixel(hdc,x,y))
        {
            same=same+1;
        }
        x=x+1;
    }
    y=y+1;
}
if(same==w*w)
{
    SetDlgItemText(IDC_EDIT1,"未变化");
}
if(same<w*w)
{
    SetDlgItemText(IDC_EDIT1,"变化");
}

解决方案 »

  1.   

    if(same==w*w) 改成 if(same==(w*w))试试看还有下面的same<w*w改成 same<(w*w)
      

  2.   

    感觉这里有问题:
    for(int i1=1;i1<w+1;i1++)
    {
      for(int j1=1;j1<w+1;j1++)
      {
    original[j1][i1]=GetPixel(hdc,x,y);
    x=x+1;
      }
      y=y+1;
    }
    修改:
    for(int i1=1;i1<w+1;i1++)
    {
      x = 0;
      for(int j1=1;j1<w+1;j1++)
      {
    original[j1][i1]=GetPixel(hdc,x,y);
    x=x+1;
      }
      y=y+1;
    }
      

  3.   

    //想检测一块方形区域的图形是否发生变化
    //用来存放颜色的数组,区域大小40*40
    COLORREF original[41][41];
    //x,y是坐标变量,x0,y0是区域的左上角的点(原点),w是区域的长
    int x=x0,y=y0,w=40;
    //开始赋初值(横向)
    for(int i1=1;i1<w+1;i1++)
    {
      x = x0;
      for(int j1=1;j1<w+1;j1++)
      {
       original[j1][i1]=GetPixel(hdc,x,y);
       x=x+1;
      }
      y=y+1;
    }
    //等待图形发生变化
    Sleep(8000);
    //相同像素的数量
    int same=0;
    x=x0,y=y0;
    ////开始判断(横向)
    for(int i2=1;i2<w+1;i2++)
    {
      x= x0;
      for(int j2=1;j2<w+1;j2++)
      {
      //检验该点的像素值是否等于之前记录的
      if(original[j2][i2]==GetPixel(hdc,x,y))
      {
      same=same+1;
      }
      x=x+1;
      }
      y=y+1;
    }
    if(same==w*w)
    {
      SetDlgItemText(IDC_EDIT1,"未变化");
    }
    if(same<w*w)
    {
      SetDlgItemText(IDC_EDIT1,"变化");
    }
      

  4.   

    这些东西我都是用鼠标SetCursorPos(x,y)测试过的,鼠标的指针指向是完全正确的
    可能错误不是从代码角度,或者从硬件、函数响应机制角度考虑
      

  5.   

    另外谢谢你,我其实也测试过的,直接输出same的值,两天时间我不可能白花的对吧,呵呵
      

  6.   

    看看你的GetPixel返回成功了么?
      

  7.   

    我想请问这里的 GetPixel()的用法是哪一个API? 
    我看MSDN里面只有
    Status GetPixel(INT x,
        INT y,
        Color *color
    );
      

  8.   

    ?GetPixel(HDC hdc,int x,inty) 不是这样吗?
      

  9.   

    不好意思,可能是我本地的MSDN过期了, GetPixel(HDC hdc,int x,inty)是正确的. 
    会不会返回值一直是CLR_INVALID??
      

  10.   

    问题应该出在你的hdc上
    有看过取出来的COLORREF跟屏幕上的一致?把取出来的COLORREF ARRAY打印到窗口另一块区域去,看看是否跟原图一样
    因为我怀疑你的Getpixel取出来的都是一个颜色,没取对。
    你这个明显不能单步调试,因为那样的Getpixel已经不是原值了