在 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())
还要确保检查 ,因为您的代码绝对没有效率。如果效率对你很重要,尝试不同的方法,但这不在这个问题的范围内。
你好,我正在开发读取整个图像并将绿线颜色更改为红线的程序,例如我有这张图像
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())
还要确保检查