for (m = 0; m <= 255; m++) {
if (Ha[1][1][m]>=1040) {
pDC->MoveTo(m+40, 300); pDC->LineTo(m+40, 40);
}else if(Ha[1][1][m]>0 && Ha[1][1][m]<1040){ pDC->MoveTo(m+40, 300);
pDC->LineTo(m+40, 300-Ha[1][1][m]/4);}
}
//显示匹配图的直方图
void CImageRetrievalDlg::OnShowIm2() {
}
}
// 恢复以前的画笔
if (Ha[1][1][m]>0) { }
strTemp.Format(\Ha[1][1][m]); pDC->TextOut( m+40, 20, strTemp);
pDC->SelectObject(pOldPen); // 删除新的画笔 delete pPenRed; delete pPenBlue;
}
CDlgHistShow dlgShow; dlgShow.DoModal();
//计算子块的颜色对表
void CImageRetrievalDlg::CalculateColorPair(int x, int y) {
//采用欧氏距离表示颜色对 for(int ka=0; ka<8; ka++) { }
for(int numb=0; numb<32; numb++) { }
//计算(x,y)与周围所有子块的颜色直方图的欧氏距离 for(int i=0; i<256; i++) {
if((x-1)>=0 && (y-1)>=0)
o_dis[0]=o_dis[0]+(Ha[x-1][y-1][i]-Ha[x][y][i])*(Ha[x-1][y-1][i]-Ha[x]pair[numb].x1=-1; pair[numb].y1=-1; pair[numb].o_dis1=-1; o_dis[ka]=0;
[y][i]);
else
o_dis[0]=-1;
if((y-1)>=0)
o_dis[1]=o_dis[1]+(Ha[x][y-1][i]-Ha[x][y][i])*(Ha[x][y-1][i]-Ha[x][y]
[i]);
else
o_dis[1]=-1;
if((x+1)<=3 && (y-1)>=0)
o_dis[2]=o_dis[2]+(Ha[x+1][y-1][i]-Ha[x][y][i])*(Ha[x+1][y-1][i]-Ha[x]
[y][i]);
else
o_dis[2]=-1;
if((x-1)>=0)
o_dis[3]=o_dis[3]+(Ha[x-1][y][i]-Ha[x][y][i])*(Ha[x-1][y][i]-Ha[x][y]
[i]);
else
o_dis[3]=-1;
if((x+1)<=3)
o_dis[4]=o_dis[4]+(Ha[x+1][y][i]-Ha[x][y][i])*(Ha[x+1][y][i]-Ha[x][y]
[i]);
else
o_dis[4]=-1;
if((x-1)>=0 && (y+1)<=3)
o_dis[5]=o_dis[5]+(Ha[x-1][y+1][i]-Ha[x][y][i])*(Ha[x-1][y+1][i]-Ha[x]
[y][i]);
else
o_dis[5]=-1;
if((y+1)<=3)
o_dis[6]=o_dis[6]+(Ha[x][y+1][i]-Ha[x][y][i])*(Ha[x][y+1][i]-Ha[x][y]
[i]);
else
o_dis[6]=-1;
if((x+1)<=3 && (y+1)<=3)
o_dis[7]=o_dis[7]+(Ha[x+1][y+1][i]-Ha[x][y][i])*(Ha[x+1][y+1][i]-Ha
[x][y][i]);
}
//取平方根
for(int j=0; j<8; j++) { }
//取得颜色已有数目 int num=0;
for(int pairnum=0; pairnum<32; pairnum++) { }
//计算域值 double ave=0;
if(pair[pairnum].x1!=-1) num++;
if(o_dis[j]>=0) o_dis[j]=sqrt(o_dis[j]);
else
o_dis[7]=-1;
for(int e=0; e<8; e++) { }
ave+=o_dis[e];
ave=ave/8; ave=ave*0.02;
//对该子块的颜色对表进行从大到小的排序(冒泡排序) int count=8; double temp; for(int i1=count; i1>0; i1--) { }
//消除那些颜色对差值小于域值的颜色对,以消除那些没有意义的小对象 for(int k1=0; k1 if(fabs(o_dis[k1]-o_dis[k1+1]) for(int l=k1+1;l if(o_dis[j1] temp=o_dis[j1]; o_dis[j1]=o_dis[j1+1]; o_dis[j1+1]=temp;