一開始讀圖時,要先把每個像數統計出來
// 計算 Histogram
for (i=0;i { bPtrOriginalImage = (Byte *)imOriginal->Picture->Bitmap->ScanLine[i]; for (j=0;j for (k=0;k iHistogram[k][bPtrOriginalImage[j*iChannelNumber+k]]++; } 計算完後 再去算累加起來的直方並畫出 // 計算 Cumulative Histogram for (i=0;i<256;i++)> { for (k=0;k<3;k++)> { if (i==0) iCumulativeHistogram[k][i] = iHistogram[k][i]; else iCumulativeHistogram[k][i] = iCumulativeHistogram[k][i-1] + iHistogram[k][i]; // 建立 Histogram Equalization Table bHistogramEqualizationTable[k][i] = (byte)((iCumulativeHistogram[k][i] * 255 / iPixelNumber) + 0.5); } // 計算每個所需畫線的長度 t t = int(( float(iHistogram[rgHistogramChannel->ItemIndex][i]) * fHistogramScalar ) + 0.5); imHistogram->Canvas->MoveTo(i*2+1,300); imHistogram->Canvas->LineTo(i*2+1,300-t); } 比較有趣的是,第一次用到BCB的MoveTo和LineTo來移動分行和畫線,LineTo的第二個參數,還可以自訂長度,或是用*的來讓比例縮小。
沒有留言:
張貼留言