C#图像处理刚上手遇到一些问题 第一次发帖
我在窗口上画了4个picturebox
一个用来放置原图
三个用来放置RGB通道的图片,类似PS一样。
我认为我代码应该没写错,不过现实出来的问题是:三个picturebox全都现实的R通道(因为R获取在循环最后一句)。
如果我把G通道获取放在循环最后一句 三个picturebox全都会显示G通道。
我是新手,这也是我第一次发帖,恳请大家的帮助。
附上源码
         private void buttonOpen_Click(object sender, EventArgs e)
         {
             OpenFileDialog opendlg = new OpenFileDialog();
             opendlg.Filter = "支持的图像格式 (*.jpg,*.jpeg*.bmp)|*.jpg;*.jpeg;*.bmp|所有格式(*.*)|*.*";
             if (opendlg.ShowDialog() == DialogResult.OK)
             {
                 Bitmap image = new Bitmap(opendlg.FileName);
                 pictureBox1.Image = image;               
                 //RGB提取
                 int i, j, rr, gg, bb;
                 Bitmap bTemp = new Bitmap(pictureBox1.Image);
                 Bitmap bBlue = bTemp;
                 Bitmap bRed = bTemp;
                 Bitmap bGreen = bTemp;
                 Color cc = new Color();
                 Color cBlue = new Color();
                 Color cRed = new Color();
                 Color cGreen = new Color();
                 for( i = 0; i < bTemp.Width; i++ )
                 {
                     for( j = 0; j < bTemp.Height; j++ )
                     {
                         cc = bTemp.GetPixel(i, j);
                         rr = cc.R;
                         gg = cc.G;
                         bb = cc.B;
                         cGreen = Color.FromArgb(0, gg, 0);
                         bGreen.SetPixel(i, j, cGreen);
                         cBlue = Color.FromArgb(0, 0, bb);
                         bBlue.SetPixel(i, j, cBlue);
                         cRed = Color.FromArgb(rr, 0, 0);                                       
                         bRed.SetPixel(i, j, cRed);//可能有问题的地方,因为这句的原因,下面的图片都是红色                          
                     }
                 }
                 pictureBoxBlue.Image = bBlue;
                 pictureBoxRed.Image = bRed;
                 pictureBoxGreen.Image = bGreen;
             }
         }
------解决方案--------------------
Bitmap bBlue = bTemp;
 Bitmap bRed = bTemp;
 Bitmap bGreen = bTemp;
三个都指向同一个bTemp,当然都是一个了,你需要都new成新对象