我的任务需要帮助。基本上,这就是我想要做的:
- 将图像加载到
PictureBox
- 计算每个像素中255(最大值)和R值的差值,以及255和G值的差值,也计算B值
- 从上面的计算来看,绝对值最小表示像素的颜色更接近那个颜色(例如:(255-R值)的绝对值最小,所以像素更接近那个颜色)
- 将像素颜色更改为更接近的颜色(在上面的示例中,这意味着将其更改为红色)
- 在输出图片框中显示结果
结果,我将获得具有这三种原色的图像。
我写了这样的代码:
Bitmap img = new Bitmap(InputPictureBox.Image);
byte R, G, B;
Color pixelColor;
for (int x = 0; x < img.Width; x++)
{
for (int y = 0; y < img.Height; y++)
{
pixelColor = img.GetPixel(x, y);
R = (byte) Math.Abs(pixelColor.R - 255);
G = (byte) Math.Abs(pixelColor.G - 255);
B = (byte) Math.Abs(pixelColor.B - 255);
if (R < G && R < B)
{
pixelColor = Color.Red;
}
else if (G < R && G < B)
{
pixelColor = Color.Green;
}
else if (B < R && B < G)
{
pixelColor = Color.Blue;
}
}
}
OutputPictureBox.Image = img;
问题是彩色图像随后会反转。那么,我的代码有什么问题?我认为这些if
陈述不起作用,但我不知道为什么。我错了吗?
还有一个与我上面的代码相关的问题,它是否可以通过简单地计算 R/G/B 值的差距来实现,或者它绝对必须通过使用欧几里得距离来完成?
如果您不介意,请告诉我如何解决这个问题或者应该如何编写代码。我曾经读过一个非常相似的问题,但给出的答案仍然没有给我一个线索。