改变C#中的像素颜色

时间:2017-04-28 12:11:49

标签: c# .net colors system.drawing

你好我正在研究读取整个图像的程序,并将绿线的颜色更改为红线,例如我有这个图像this image,我希望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;
     }

但结果是整个图像变为红色如何解决它!!

1 个答案:

答案 0 :(得分:6)

您是否尝试过调试(您可以轻松找到所有像素变为红色的原因)?您的整个图片变为红色,因为if语句始终为true

发生这种情况的原因是因为您正在比较结构。但是,您的像素name不会说White(您要比较的是什么),但它会包含一个字符串,其颜色为hex(例如ffffff) 。所以它永远不会相等,因为对象是不同的。因此,既然您想查看ARGB值是否相同,则必须比较这些值。

将您的陈述更改为此以比较ARGB值:

if (pxl.ToArgb() != Color.White.ToArgb())

另外请务必检查Cody Gray's comment,因为您的代码效率绝对不高。如果效率对您很重要,请尝试不同的方法,但这超出了本问题的范围。