📄 sampledlg.cpp
字号:
if(endy==h)
emptycol=true;
else
for(i=prex;i<=endx;i++)
{
pBmpdata = lpDIBBits +
(w*endy + i)*Res;
blue = *pBmpdata;
green = *(pBmpdata+1);
red = *(pBmpdata+2);
RGB2YUV(red,green,blue,y,u,v);
if ((( y>=colorinfor->redcolYmin) && (y<=colorinfor->redcolYmax) ) &&
( (colorinfor->redcolUmin<=u) && (u<=colorinfor->redcolUmax) ) &&
( (colorinfor->redcolVmin<=v) && (v<=colorinfor->redcolVmax) ) )
{
if(i!=prex && i!=endx)
redcount[redobj]++;
emptycol=false;
// break;
}
}
////end of col scan
///start of row scan
bool emptyrow;
if(endx==w)
emptyrow=true;
else
for(i=prey;i<=endy;i++)
{
pBmpdata = lpDIBBits +
(w*i + endx)*Res;
blue = *pBmpdata;
green = *(pBmpdata+1);
red = *(pBmpdata+2);
RGB2YUV(red,green,blue,y,u,v);
if (( (colorinfor->redcolYmin<=y) && (y<=colorinfor->redcolYmax) ) &&
( (colorinfor->redcolUmin<=u) && (u<=colorinfor->redcolUmax) ) &&
( (colorinfor->redcolVmin<=v) && (v<=colorinfor->redcolVmax) ) )
{
redcount[redobj]++;
emptyrow=false;
// break;
}
}
/////////// start col scan
bool emptycol0=true;
if(prey==0)
emptycol0=true;
else
for(i=prex;i<=endx;i++)
{
pBmpdata = lpDIBBits +
(w*prey + i)*Res;
blue = *pBmpdata;
green = *(pBmpdata+1);
red = *(pBmpdata+2);
RGB2YUV(red,green,blue,y,u,v);
if (( (colorinfor->redcolYmin<=y) && (y<=colorinfor->redcolYmax) ) &&
( (colorinfor->redcolUmin<=u) && (u<=colorinfor->redcolUmax) ) &&
( (colorinfor->redcolVmin<=v) && (v<=colorinfor->redcolVmax) ) )
{
if(i!=prex && i!=endx
)
redcount[redobj]++;
emptycol0= false;
// break;
}
}
////end of col scan
///start of row scan
bool emptyrow0=true;
if(prex==0)
emptyrow0=true;
else
for(i=prey;i<=endy;i++)
{
pBmpdata = lpDIBBits +
(w*i + prex)*Res;
blue = *pBmpdata;
green = *(pBmpdata+1);
red = *(pBmpdata+2);
RGB2YUV(red,green,blue,y,u,v);
if (( (colorinfor->redcolYmin<=y) && (y<=colorinfor->redcolYmax) ) &&
( (colorinfor->redcolUmin<=u) && (u<=colorinfor->redcolUmax) ) &&
( (colorinfor->redcolVmin<=v) && (v<=colorinfor->redcolVmax) ) )
{
redcount[redobj]++;
emptyrow0=false;
}
}
////end of row scan
////////////1
if(emptyrow &&
emptycol
&& emptyrow0 &&
emptycol0)
{
finished=true;
}
else
{ if(!emptycol)
endy++;
if(!emptyrow )
endx++;
if(!emptycol0)
prey--;
if(!emptyrow0)
prex--;
}
}//end while
RedxlArray[redobj]=prex+1;
RedxrArray[redobj]=endx-1;
RedytArray[redobj]=prey+1;
RedybArray[redobj]=endy-1;
if(redcount[redobj]<2)
{
redcount[redobj]=0;
redobj--;
}
}//end of scan
}//end of red anglysis
if ( ( (colorinfor->bluecolYmin<=y) && (y<=colorinfor->bluecolYmax) ) &&
( (colorinfor->bluecolUmin<=u) && (u<=colorinfor->bluecolUmax) ) &&
( (colorinfor->bluecolVmin<=v) && (v<=colorinfor->bluecolVmax) ) )
{
bool Scaned=FALSE;
for(i=0;i<=blueobj;i++)
if(col<=bluexr[i] && col>=bluexl[i] &&
row>=blueyt[i] && row<=blueyb[i])
Scaned=TRUE;
if(!Scaned && blueobj<maxpatch-1)
{
blueobj++;
bluecount[blueobj]=1;
int prex=col-1;
int prey=row-1;
int endx=col+1;
int endy=row+1;
bool finished=false;
while(!finished)
{
/////////// start col scan
bool emptycol=true;
if(endy==h)
emptycol=true;
else
for(i=prex;i<=endx;i++)
{
pBmpdata = lpDIBBits +
(w*endy + i)*Res;
blue = *pBmpdata;
green = *(pBmpdata+1);
red = *(pBmpdata+2);
RGB2YUV(red,green,blue,y,u,v);
if ((( y>=colorinfor->bluecolYmin) && (y<=colorinfor->bluecolYmax) ) &&
( (colorinfor->bluecolUmin<=u) && (u<=colorinfor->bluecolUmax) ) &&
( (colorinfor->bluecolVmin<=v) && (v<=colorinfor->bluecolVmax) ) )
{
if(i!=prex && i!=endx
)
bluecount[blueobj]++;
emptycol=false;
// break;
}
}
////end of col scan
///start of row scan
bool emptyrow=true;
if(endx==w)
emptyrow=true;
else
for(i=prey;i<=endy;i++)
{
pBmpdata = lpDIBBits +
(w*(i) + endx)*Res;
blue = *pBmpdata;
green = *(pBmpdata+1);
red = *(pBmpdata+2);
RGB2YUV(red,green,blue,y,u,v);
if (( (colorinfor->bluecolYmin<=y) && (y<=colorinfor->bluecolYmax) ) &&
( (colorinfor->bluecolUmin<=u) && (u<=colorinfor->bluecolUmax) ) &&
( (colorinfor->bluecolVmin<=v) && (v<=colorinfor->bluecolVmax) ) )
{
bluecount[blueobj]++;
emptyrow=false;
// break;
}
}
/////////// start col scan
bool emptycol0=true;
if(prey==0)
emptycol0=true;
else
for(i=prex;i<=endx;i++)
{
pBmpdata = lpDIBBits +
(w*prey + i)*Res;
blue = *pBmpdata;
green = *(pBmpdata+1);
red = *(pBmpdata+2);
RGB2YUV(red,green,blue,y,u,v);
if (( (colorinfor->bluecolYmin<=y) && (y<=colorinfor->bluecolYmax) ) &&
( (colorinfor->bluecolUmin<=u) && (u<=colorinfor->bluecolUmax) ) &&
( (colorinfor->bluecolVmin<=v) && (v<=colorinfor->bluecolVmax) ) )
{
if(i!=prex && i!=endx)
bluecount[blueobj]++;
emptycol0= false;
// break;
}
}
////end of col scan
///start of row scan
bool emptyrow0=true;
if(prex==0)
emptyrow0=true;
for(i=prey;i<=endy;i++)
{
pBmpdata = lpDIBBits +
(w*i + prex)*Res;
blue = *pBmpdata;
green = *(pBmpdata+1);
red = *(pBmpdata+2);
RGB2YUV(red,green,blue,y,u,v);
if (( (colorinfor->bluecolYmin<=y) && (y<=colorinfor->bluecolYmax) ) &&
( (colorinfor->bluecolUmin<=u) && (u<=colorinfor->bluecolUmax) ) &&
( (colorinfor->bluecolVmin<=v) && (v<=colorinfor->bluecolVmax) ) )
{
bluecount[blueobj]++;
emptyrow0=false;
// break;
}
}
////end of row scan
////////////1
if(emptyrow &&
emptycol
&& emptyrow0 &&
emptycol0)
{
finished=true;
}
else
{
if(!emptycol )
endy++;
if(!emptyrow )
endx++;
if(!emptycol0)
prey--;
if(!emptyrow0)
prex--;
}
}//end while
bluexl[blueobj]=prex+1;
bluexr[blueobj]=endx-1;
blueyt[blueobj]=prey+1;
blueyb[blueobj]=endy-1;
if(bluecount[blueobj]<2)
{
bluecount[blueobj]=0;
blueobj--;
}
}//end of scan
}//end of blue
/* else
{
if(m_Black)
{
*pBmpdata=0;
*(pBmpdata+1)=0;
*(pBmpdata+2)=0;
}
}*/
}
}//end of col scan
}//end of row scan
//short thdis=10;
int mergepatch=0;
for(i=0;i<=redobj;i++)
if(redcount[i]<4 || RedxlArray[i]==RedxrArray[i] || RedytArray[i]==RedybArray[i])
{
redcount[i]=0;
RedxlArray[i]=0;
RedxrArray[i]=0;
RedytArray[i]=0;
RedybArray[i]=0;
mergepatch++;
}
for(i=0;i<=redobj;i++)//array from big to small
for(j=i+1;j<=redobj;j++)
if(redcount[i]<redcount[j])
{
swap(RedxlArray[j],RedxlArray[i] );
swap(RedxrArray[j],RedxrArray[i] );
swap(RedytArray[j],RedytArray[i] );
swap(RedybArray[j],RedybArray[i] );
swap(redcount[j],redcount[i]);
}
redobj-=mergepatch;
//////////get oppo num
mergepatch=0;
for(j=0;j<=blueobj;j++)
if(bluecount[j]<4 || bluexl[j]==bluexr[j] || blueyt[j]==blueyb[j])
{
bluecount[j]=0;
bluexl[j]=0;
bluexr[j]=0;
blueyt[j]=0;
blueyb[j]=0;
mergepatch++;
}
for(i=0;i<=blueobj;i++)
for(j=i+1;j<=blueobj;j++)
if(bluecount[i]<bluecount[j])
{
swap(bluexl[j],bluexl[i]);
swap(bluexr[j],bluexr[i]);
swap(blueyt[j],blueyt[i]);
swap(blueyb[j],blueyb[i]);
swap(bluecount[j],bluecount[i]);
}
blueobj-=mergepatch;
m_Var=Res;
m_Pixel0=redobj;
m_Pixel1=blueobj;
FILE* fp;
fp=fopen("infor\\pixels","a");
fprintf(fp,"%d %d %d %d %d\n", blueobj, redobj, Res, bluecount[1], redcount[1]);
fclose(fp);
UpdateData(FALSE);
//StretchDIBits(gDC->m_hDC,0,0,w,h,0,0,w,h,lpDIBBits,lpbi,DIB_RGB_COLORS,SRCCOPY);
CPen* pOldPen = NULL;
CPen pen3;
pen3.CreatePen(PS_SOLID,2,RGB(255,255,255));
pOldPen = gDC->SelectObject(&pen3);
gDC->MoveTo(bluexl[0],h-blueyt[0]);
gDC->LineTo(bluexr[0],h-blueyt[0]);
gDC->LineTo(bluexr[0],h-blueyb[0]);
gDC->LineTo(bluexl[0],h-blueyb[0]);
gDC->LineTo(bluexl[0],h-blueyt[0]);
CPen pen2;
pen2.CreatePen(PS_SOLID,2,RGB(255,0,0));
gDC->SelectObject(&pen2);
gDC->MoveTo(RedxlArray[0],h-RedytArray[0]);
gDC->LineTo(RedxrArray[0],h-RedytArray[0]);
gDC->LineTo(RedxrArray[0],h-RedybArray[0]);
gDC->LineTo(RedxlArray[0],h-RedybArray[0]);
gDC->LineTo(RedxlArray[0],h-RedytArray[0]);
gDC->SelectObject(pOldPen);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -