for(int sda=0;sda<4;sda++)
for(int tda=0;tda<256;tda++){ }
Ha[fda][sda][tda]=0;
for(int fdb=0;fdb<4;fdb++)
for(int sdb=0;sdb<4;sdb++)
for(int tdb=0;tdb<256;tdb++){ }
Sa[fdb][sdb][tdb]=0;
for(int fdc=0;fdc<4;fdc++)
for(int sdc=0;sdc<4;sdc++)
for(int tdc=0;tdc<256;tdc++){ }
Va[fdc][sdc][tdc]=0;
for( i=0;i<4;i++)
for( j=0;j<4;j++)
for(int k=0;k for(int l=0;l x=j*width+l; y=i*height+k; clr=dcMem.GetPixel(x,y); R=GetRValue(clr); G=GetGValue(clr); B=GetBValue(clr); //RGB转HSV int maxp=max(R,G); int max=max(maxp,B); int minp=min(R,G); int min=min(minp,B); if(max!=0) {S=(max-min)/max;} else {S=0;H=-1;break;} // 饱和度 if(max==min) {break;} if (R == max) H = (G-B)/(max-min); else if (G == max) H = 2 + (B-R)/(max-min); else H = 4 + (R-G)/(max-min); H = H * 60 ; if (H < 0) H = H + 360 ; //色彩度 V=max; //亮度 Ha[i][j][H]++; Sa[i][j][S]++; } //绘臵直方图 void CImageRetrievalDlg::HistogramShow(int idc) } Va[i][j][V]++; { int m; CWnd* pWnd = GetDlgItem(idc);// 获取绘制直方图文本框的标签 // 获取设备上下文 CDC* pDC = pWnd->GetDC(); pWnd->Invalidate(); pWnd->UpdateWindow(); pDC->Rectangle(0, 0, 367,338); CPen* pPenRed = new CPen;// 创建画笔对象 pPenRed->CreatePen(PS_SOLID, 1, RGB(255,0,0));// 创建红色画笔(用 于绘制坐标轴) CPen* pOldPen = pDC->SelectObject(pPenRed);// 选入红色画笔,并保 存以前的画笔 pDC->MoveTo(40,40);// 绘制坐标轴 pDC->LineTo(40, 300);// 绘制垂直轴 pDC->LineTo(340, 300);// 绘制水平轴 // 绘制X轴刻度值 CString strTemp; strTemp.Format(\ pDC->TextOut(40, 303, strTemp); strTemp.Format(\ pDC->TextOut(90, 303, strTemp); strTemp.Format(\ pDC->TextOut(140, 303, strTemp); strTemp.Format(\ pDC->TextOut(190, 303, strTemp); strTemp.Format(\ pDC->TextOut(240, 303, strTemp); strTemp.Format(\ pDC->TextOut(295, 303, strTemp); // 绘制X轴刻度 for (m = 0; m < 256; m += 5) { } // 绘制X轴箭头 if ((m & 1) == 0) { } else { } // 5的奇数倍数 pDC->MoveTo(m + 40, 303); pDC->LineTo(m + 40, 310); // 10的倍数 pDC->MoveTo(m + 40, 303); pDC->LineTo(m + 40, 307); pDC->MoveTo(335,295); pDC->LineTo(340,300); pDC->LineTo(335,305); // 绘制Y轴箭头 pDC->MoveTo(40,40); pDC->LineTo(35,45); pDC->MoveTo(40,40); pDC->LineTo(45,45); LONG lMaxCount = 0;// 直方图中最大计数值 // 计算最大计数值 for (m = 0; m <= 255; m ++) { } // 判断是否大于当前最大值 if (Ha[1][1][m] > lMaxCount) { } // 更新最大值 lMaxCount = Ha[1][1][m]; pDC->TextOut(10, 150, \ CPen* pPenBlue = new CPen;// 声名画笔对象 pPenBlue->CreatePen(PS_SOLID, 1, RGB(0,0,255));// 创建蓝色画笔(用 于绘制直方图) pDC->SelectObject(pPenBlue);// 选入蓝色画笔 // 判断是否存在计数值 if(lMaxCount > 0){ // 绘制直方图