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

C# 从图像中的每个像素获取色调,c#,image,image-processing,colors,C#,Image,Image Processing,Colors,我试图获得图像中每个像素的色调或“H”,然后改变具有特定色调的像素的颜色。我正在尝试更改所有色调>=210且使用的像素,方法,Luke 或者,我认为,最好是用图形上下文来完成。这对我来说挺有用的。在下面的代码中,我有一个带有PictureBox的Windows窗体,名为imgViwer。然后单击a按钮执行代码: private void HueFilter() { float y; Bitmap i = (Bitmap)imgViwer.Image; for (int a = 0;

我试图获得图像中每个像素的色调或“H”,然后改变具有特定色调的像素的颜色。我正在尝试更改所有色调>=210且使用的像素,方法,Luke


或者,我认为,最好是用图形上下文来完成。

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

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进行刷新。

您应该使用调试器:找出未检测到的像素,设置一个断点,并查看它为什么无法通过测试。我可以对范围略作质疑,至少用纯蓝色225测试一下。更可能的问题是保存结果的代码;看看有没有人打过电话。顺便说一句,x和y可能是坐标a和c的更好名称,而float y可能是float色调,更具可读性。+1是的,您将看到锁位的巨大性能改进
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;
}