你好我正在研究读取整个图像的程序,并将绿线的颜色更改为红线,例如我有这个图像,我希望c#程序获得绿色像素并将其转换为红色 我试过这段代码:`
public Bitmap ReadImgPixel(Bitmap img)
{
Bitmap pic = new Bitmap(img,img.Width,img.Height);
int a1 = img.Width;
int a2 = img.Height;
System.Drawing.Color[,] pixels = new System.Drawing.Color[a1,a2];
for (int i = 0;i< img.Width ; i++)
{
for(int j=0; j < img.Height; j++)
{
System.Drawing.Color pxl = img.GetPixel(i, j);
if (pxl != System.Drawing.Color.White)
{
pic.SetPixel(i, j, System.Drawing.Color.Red);
}
}
}
return pic;
}
但结果是整个图像变为红色如何解决它!!
答案 0 :(得分:6)
您是否尝试过调试(您可以轻松找到所有像素变为红色的原因)?您的整个图片变为红色,因为if
语句始终为true
。
发生这种情况的原因是因为您正在比较结构。但是,您的像素name
不会说White
(您要比较的是什么),但它会包含一个字符串,其颜色为hex
(例如ffffff
) 。所以它永远不会相等,因为对象是不同的。因此,既然您想查看ARGB
值是否相同,则必须比较这些值。
将您的陈述更改为此以比较ARGB
值:
if (pxl.ToArgb() != Color.White.ToArgb())
另外请务必检查Cody Gray's comment,因为您的代码效率绝对不高。如果效率对您很重要,请尝试不同的方法,但这超出了本问题的范围。