19,473
社区成员




BOOL ImageFind::FindPic()
{
if (!PrintScreen()) //截图部分没问题,在另一个屏幕找色函数中正常工作
{
AfxMessageBox("截图出错");
return FALSE;
}
//屏幕图像每像素字节数
int npixelByteScr=m_nBitCountScr/8;
//被找图像每像素字节数
int npixelByteFind=m_nBitCountFind/8;
//循环变量
int i, j, m;
//屏幕颜色分量
int r1,g1,b1;
//被找图颜色分量
int r2,g2,b2;
//标志
int flag;
for(i=0;i<m_nHeightScr*m_nWidthScr;i++)
{ flag=0;
m=i;
for (j=0;j<m_nHeightFind*m_nWidthFind;j++)
{
//屏幕像素颜色分量
//m_pImageDataScreen是屏幕图像数据指针,上面的截图函数取得的DIB数据
r1=*(m_pImageDataScreen+m*npixelByteScr+2);
g1=*(m_pImageDataScreen+m*npixelByteScr+1);
b1=*(m_pImageDataScreen+m*npixelByteScr+0);
//被找图像素颜色分量
//m_pImageDataFind为被找图的DIB图像数据,跟踪调试没发现问题
r2=*(m_pImageDataFind+j*npixelByteFind+2);
g2=*(m_pImageDataFind+j*npixelByteFind+1);
b2=*(m_pImageDataFind+j*npixelByteFind+0);
if (r1==r2&&g1==g2&&b1==b2)
{
m++;
flag=1;
if(m-i>=m_nHeightFind*m_nWidthFind)
break;
}
else
{
flag=0;
break;
}
}
if(1==flag) break;
}
//找到坐标coordinateY,coordinateX
coordinateY=m_nHeightScr-i/m_nWidthScr-1;
coordinateX=i-i/m_nWidthScr*m_nWidthScr-m_nWidthFind; //返回被找图左上角坐标
return TRUE;
}
m=i;
for (j=0;j<m_nHeightFind*m_nWidthFind;j++)
{
//屏幕像素颜色分量
//m_pImageDataScreen是屏幕图像数据指针,上面的截图函数取得的DIB数据
r1=*(m_pImageDataScreen+m*npixelByteScr+2);
g1=*(m_pImageDataScreen+m*npixelByteScr+1);
b1=*(m_pImageDataScreen+m*npixelByteScr+0);