2012-12-11 36 views
0

這是我今天使用的直方圖函數,如果我沒有錯,它是通過灰色創建直方圖。我有一個函數可以創建每個位圖的直方圖。我怎樣才能爲每個位圖的R.G.B創建另外3個直方圖?

我要的是另一個函數將返回我的每個位的3個直方圖:

第一直方圖將是紅顏色的位圖的第二個爲綠色,最後一個爲藍色。

public static long[] GetHistogram(Bitmap b) 
     { 
      long[] myHistogram = new long[256]; 
      BitmapData bmData = null; 

      try 
      { 
       //Lock it fixed with 32bpp 
       bmData = b.LockBits(new Rectangle(0, 0, b.Width, b.Height), ImageLockMode.ReadOnly, PixelFormat.Format32bppArgb); 
       int scanline = bmData.Stride; 
       System.IntPtr Scan0 = bmData.Scan0; 
       unsafe 
       { 
        byte* p = (byte*)(void*)Scan0; 
        int nWidth = b.Width; 
        int nHeight = b.Height; 
        for (int y = 0; y < nHeight; y++) 
        { 
         for (int x = 0; x < nWidth; x++) 
         { 
          long Temp = 0; 
          Temp += p[0]; // p[0] - blue, p[1] - green , p[2]-red 
          Temp += p[1]; 
          Temp += p[2]; 
          Temp = (int)Temp/3; 
          myHistogram[Temp]++; 
          //we do not need to use any offset, we always can increment by pixelsize when 
          //locking in 32bppArgb - mode 
          p += 4; 
         } 
        } 
       } 
       b.UnlockBits(bmData); 
      } 
      catch 
      { 
       try 
       { 
        b.UnlockBits(bmData); 
       } 
       catch 
       { 
       } 
      } 
      return myHistogram; 
     } 

我該怎麼做?

回答

1

在其中指定

Temp += p[0] 
... 

部分把三個值成單獨的直方圖:

histB[p[0]]++; 
histG[p[1]]++; 
histR[p[2]]++; 
0

可以使用交錯數組(數組的數組),其中,從p值[0], p [1],p [2]可以放入鋸齒狀陣列。然後處理鋸齒陣列的索引值。

希望這會有所幫助

相關問題