100分请问:这段程序的作用是什么啊?
//数据流回调函数
void __stdcall StreamNotify(const BYTE* pDIBHead, const BYTE* pDIBits, LPVOID pParam)
{
BITMAPINFO* pHead = (BITMAPINFO*)pDIBHead;
if (g_nRect==1)//监控区域的方框
{
try{
int nX, nY;
nY = g_nFLeftTopy;
for (nX = g_nFLeftTopx; nX < g_nFRightBottomx; nX++)
{
*((unsigned char*)pDIBits+g_nLWidth*3*nY+nX*3+0) = 0;
*((unsigned char*)pDIBits+g_nLWidth*3*nY+nX*3+1) = 0;
*((unsigned char*)pDIBits+g_nLWidth*3*nY+nX*3+2) = 255;
}
nY = g_nFRightBottomy-1;
for (nX = g_nFLeftTopx; nX < g_nFRightBottomx; nX++)
{
*((unsigned char*)pDIBits+g_nLWidth*3*nY+nX*3+0) = 0;
*((unsigned char*)pDIBits+g_nLWidth*3*nY+nX*3+1) = 0;
*((unsigned char*)pDIBits+g_nLWidth*3*nY+nX*3+2) = 255;
}
int nFlagSwap = 0;
if (g_nFLeftTopy > g_nFRightBottomy)
{
int tmp = g_nFLeftTopy;
g_nFLeftTopy = g_nFRightBottomy;
g_nFRightBottomy = tmp;
nFlagSwap = 1;
}
nX = g_nFLeftTopx;
for (nY = g_nFLeftTopy; nY < g_nFRightBottomy; nY++)
{
*((unsigned char*)pDIBits+g_nLWidth*3*nY+nX*3+0) = 0;
*((unsigned char*)pDIBits+g_nLWidth*3*nY+nX*3+1) = 0;
*((unsigned char*)pDIBits+g_nLWidth*3*nY+nX*3+2) = 255;
}
nX = g_nFRightBottomx-1;
for (nY = g_nFLeftTopy; nY < g_nFRightBottomy; nY++)
{
*((unsigned char*)pDIBits+g_nLWidth*3*nY+nX*3+0) = 0;
*((unsigned char*)pDIBits+g_nLWidth*3*nY+nX*3+1) = 0;
*((unsigned char*)pDIBits+g_nLWidth*3*nY+nX*3+2) = 255;
}
if (nFlagSwap == 1)
{
int tmp = g_nFLeftTopy;
g_nFLeftTopy = g_nFRightBottomy;
g_nFRightBottomy = tmp;
}
}catch(...){}
}
if(g_nPosSet==1)
{
try{
int nStepx = -((g_nFLeftTopx-g_nFRightBottomx)/8);
int nStepy = -((g_nFLeftTopy-g_nFRightBottomy)/8);
//Draw x
int nX;
int nY = g_nFLeftTopy;
for (int nNum = 0; nNum < 8; nNum++)
{
for (nX = g_nFLeftTopx; nX < g_nFRightBottomx; nX++)
{
*((unsigned char*)pDIBits+g_nLWidth*3*nY+nX*3+0) = 0;
*((unsigned char*)pDIBits+g_nLWidth*3*nY+nX*3+1) = 0;
*((unsigned char*)pDIBits+g_nLWidth*3*nY+nX*3+2) = 255;
}
nY += nStepy;
}
//Draw y
nX = g_nFLeftTopx;
for (nNum = 0; nNum < 8; nNum++)
{
for (int nY = g_nFLeftTopy; nY < g_nFRightBottomy; nY++)
{
*((unsigned char*)pDIBits+g_nLWidth*3*nY+nX*3+0) = 0;
*((unsigned char*)pDIBits+g_nLWidth*3*nY+nX*3+1) = 0;
*((unsigned char*)pDIBits+g_nLWidth*3*nY+nX*3+2) = 255;
}
nX += nStepx;
}
//绘制选中框
if(g_nPosNO>0 && g_nPosNO<=64)
{
CRect rect;
rect.bottom=480-(g_nPosNO-1)/8*nStepy;
rect.top=rect.bottom-nStepy;
rect.left=(g_nPosNO-1)%8*nStepx;
rect.right=rect.left+nStepx;
nX=rect.left;
for (int nY =rect.top; nY < rect.bottom; nY++)
{
*((unsigned char*)pDIBits+g_nLWidth*3*nY+nX*3+0) = 0;
*((unsigned char*)pDIBits+g_nLWidth*3*nY+nX*3+1) = 255;
*((unsigned char*)pDIBits+g_nLWidth*3*nY+nX*3+2) = 0;
}
nX= rect.right;
for (nY =rect.top; nY < rect.bottom; nY++)
{
*((unsigned char*)pDIBits+g_nLWidth*3*nY+nX*3+0) = 0;
*((unsigned char*)pDIBits+g_nLWidth*3*nY+nX*3+1) = 255;
*((unsigned char*)pDIBits+g_nLWidth*3*nY+nX*3+2) = 0;
}
nY=rect.top;
for (nX = rect.left; nX < rect.right; nX++)
{
*((unsigned char*)pDIBits+g_nLWidth*3*nY+nX*3+0) = 0;
*((unsigned char*)pDIBits+g_nLWidth*3*nY+nX*3+1) = 255;
*((unsigned char*)pDIBits+g_nLWidth*3*nY+nX*3+2) = 0;
}
nY=rect.bottom;
for (nX = rect.left; nX < rect.right; nX++)
{
*((unsigned char*)pDIBits+g_nLWidth*3*nY+nX*3+0) = 0;
*((unsigned char*)pDIBits+g_nLWidth*3*nY+nX*3+1) = 255;
*((unsigned char*)pDIBits+g_nLWidth*3*nY+nX*3+2) = 0;
}
}
}catch(...){}
}
if (--g_nCount <= 0)
{
g_nCount =g_nMaxCount;
g_crCapture.Lock();
g_pData = (unsigned char*)pDIBits;
g_nFlagFace = 1;
g_crCapture.Unlock();
}
else
return;
}