unsafe
                {
                    byte* p = (byte*)(void*)Scan0;
                    //int nOffset = stride - m_Bitmap.Width * 3;
                    byte red, green, blue;
                    int nWidth = m_Bitmap.Width;
                    int nHeight = m_Bitmap.Height;
                    for (int y = 0; y < nHeight; ++y)
                    {
                        for (int x = 0; x < nWidth; ++x)
                        {
                            blue = p[0];
                            green = p[1];
                            red = p[2];
                            tt = p[0] = p[1] = p[2] = (byte)(.299 * red + .587 * green + .114 * blue);
                            rr[red]++;
                            gg[green]++;
                            bb[blue]++;
                            gray[tt]++;   //统计灰度值为tt的象素点数目  
                            p += 3; //每一个像素点由三个字节组成,分别代表red,green,blue.所以每次必须加3以移至下一像素点
                        }
                        //p += nOffset;
                    }
                }byte* p = (byte*)(void*)Scan0;为何要用两个强制类型转换?
  tt = p[0] = p[1] = p[2] = (byte)(.299 * red + .587 * green + .114 * blue);中数字前加点是什么意思?