2012-12-11 34 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]可以放入锯齿状阵列。然后处理锯齿阵列的索引值。

希望这会有所帮助

相关问题