从图像中的每个像素获取色调

时间:2012-04-26 11:20:28

标签: c# image image-processing colors

我试图获取图像的每个像素的Hue或'H',然后改变具有特定色调的像素的颜色。我正在尝试更改所有具有色调> = 210和< = 260的像素,这是蓝色的不同色调。

这是我的代码:

// 'i' is the image
// 'b' is the bitmap of the image
float y;
for (int a = 0; a < i.Height; a++) 
{ 
    for (int c = 0; c < i.Width; c++) 
    { 
        y = b.GetPixel(c, a).GetHue(); 
        if (y >= 210 && y <= 260) 
            { 
                b.SetPixel(c, a, Color.Black); 
            } 
    } 
}

唯一的问题是它没有拾取任何蓝色,从210 - 260.我很确定我正确地这样做,但我不能因为它不起作用。

如果你能解决这个问题,请在这里发帖,谢谢!

编辑:我在SetPixel上放了一个断点,它被多次调用,所以现在我将检查是否正确保存图片。

编辑2:我明白了!我没有保存图片。

2 个答案:

答案 0 :(得分:0)

使用,LockBits方法,卢克!

或者,我认为,最好使用Graphics上下文。

答案 1 :(得分:0)

这对我有用。在下面的代码中,我有一个带有PictureBox的Windows窗体,名为imgViwer。然后单击按钮我执行代码:

private void HueFilter()
{
  float y;
  Bitmap i = (Bitmap)imgViwer.Image;

  for (int a = 0; a < i.Height; a++)
  {
      for (int c = 0; c < i.Width; c++)
      {                   
          y = i.GetPixel(c, a).GetHue();
          if (y >= 210 && y <= 260)
          {
              i.SetPixel(c, a, Color.Black);
          }
      }
  }

  imgViwer.Image = i;
}

在您的情况下,您有一个名为 b 的输出图像,应该将其分配回PictureBox进行刷新。