改变C#中的像素颜色

eli*_*lly 3 .net c# system.drawing colors

你好我正在研究读取整个图像的程序,并将绿线的颜色改为红线,例如我有这个图像 这个图片 我希望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;
     }
Run Code Online (Sandbox Code Playgroud)

但结果是整个图像变成红色如何修复它!

Jur*_*jen 6

您是否尝试过调试(您可以轻松找到所有像素变为红色的原因)?你的整个画面变成红色,因为if声明总是如此true.

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

将您的语句更改为此ARGB值以比较值:

if (pxl.ToArgb() != Color.White.ToArgb())
Run Code Online (Sandbox Code Playgroud)

另外请确保查看Cody Gray的评论,因为您的代码绝对无效.如果效率对您很重要,请尝试不同的方法,但这超出了本问题的范围.