rivate void button2_Click(object sender, EventArgs e)
        {
            Bitmap pic1 = new Bitmap(pictureBox1.Image);
            int w, h;
            w = pic1.Width;
            h = pic1.Height;
            Bitmap pic2 = new Bitmap(w, h, PixelFormat.Format32bppArgb);
            BitmapData obmp = pic1.LockBits(new Rectangle(0, 0, w, h), ImageLockMode.ReadOnly, PixelFormat.Format24bppRgb);
            BitmapData nbmp = pic2.LockBits(new Rectangle(0, 0, w, h), ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb);
            unsafe
            {
                byte* op = (byte*)obmp.Scan0.ToPointer();
                byte* np = (byte*)nbmp.Scan0.ToPointer();
                int i, j, r, g, b, cc;
                for (j = 0; j < h; i++)
                {
                    for (i = 0; i < w; i++)
                    {
                        r = op[0];
                        g = op[1];
                        b = op[2];
                        cc = (r + g + b) / 3;
                        np[0] = (byte)cc;
                        np[1] = (byte)cc;
                        np[2] =(byte) cc;
                        op += 3;
                        np += 3;
                    }
                    op += obmp.Stride - w * 3;
                    np += nbmp.Stride - w * 3;
                }
            }
            pic1.UnlockBits(obmp);
            pic2.UnlockBits(nbmp);
            pictureBox1.Image=pic2;
        }这段程序能运行,但是在单机按钮运行时,就出现“尝试读取或写入受保护的内存。这通常指示其他内存已损坏”的问题,停在了“r = op[0];”请问这是什么原因,怎么解决呀

解决方案 »

  1.   


     for (j = 0; j < h; i++)
      {
      for (i = 0; i < w; i++)
    都是i++吗?
      

  2.   

    顺便问一下你这个变灰的功能叫什么?改成如下:  for (j = 0; j < h; j++)
                    {
                        for (i = 0; i < w; i++)
      

  3.   


    改成这样就OK了  for (j = 0; j < h; j++)
                    {
                        for (i = 0; i < w; i++)
    问一下,这个变灰的功能叫什么?
      

  4.   

     for (j = 0; j < h; i++)  {
      for (i = 0; i < w; i++)
      {
      

  5.   

    for (j = 0; j < h; i++) {
      for (i = 0; i < w; i++)
      {
    第一个循环体内是i++吗