我试图获取图像的每个像素的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:我明白了!我没有保存图片。
答案 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进行刷新。