在 C# 中更改像素颜色

changing pixel color in C#

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

但结果是整个图像都变红了如何解决!!

您是否尝试过调试(您可以很容易地找出为什么所有像素都变成红色)?你的整个画面变红了,因为 if 语句总是 true.

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

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

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

还要确保检查 ,因为您的代码绝对没有效率。如果效率对你很重要,尝试不同的方法,但这不在这个问题的范围内。