日期:2014-05-17  浏览次数:20897 次

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成新对象