想用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,"变化");
}
//想检测一块方形区域的图形是否发生变化
//用来存放颜色的数组,区域大小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,"变化");
}
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;
}
//用来存放颜色的数组,区域大小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,"变化");
}
可能错误不是从代码角度,或者从硬件、函数响应机制角度考虑
我看MSDN里面只有
Status GetPixel(INT x,
INT y,
Color *color
);
会不会返回值一直是CLR_INVALID??
有看过取出来的COLORREF跟屏幕上的一致?把取出来的COLORREF ARRAY打印到窗口另一块区域去,看看是否跟原图一样
因为我怀疑你的Getpixel取出来的都是一个颜色,没取对。
你这个明显不能单步调试,因为那样的Getpixel已经不是原值了