0

これは私が今日使用しているヒストグラム関数であり、間違いがなければ、灰色でヒストグラムを作成しています。

私が欲しいのは、各ビットマップの3つのヒストグラムを返す別の関数です。

最初のヒストグラムはビットマップの赤色で、2番目は緑色で、最後のヒストグラムは青色です。

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;
       }

どうすればいいですか?

4

2 に答える 2

1

指定した部分

Temp += p[0]
...

3つの値を別々のヒストグラムに入れます。

histB[p[0]]++;
histG[p[1]]++;
histR[p[2]]++;
于 2012-12-11T15:29:30.733 に答える
0

ジャグ配列(配列の配列)を使用できます。ここで、p [0]、p [1]、p[2]の値をジャグ配列に入れることができます。次に、ジャグ配列のインデックス値を操作します。

お役に立てれば

于 2012-12-11T17:02:07.173 に答える