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