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)
但结果是整个图像变成红色如何修复它!
您是否尝试过调试(您可以轻松找到所有像素变为红色的原因)?你的整个画面变成红色,因为if声明总是如此true.
发生这种情况的原因是因为您正在比较结构.但是,您的像素name不会说White(您要比较的是什么),但它将包含一个带有hex颜色值的字符串(例如ffffff).所以它永远不会相等,因为对象是不同的.因此,既然您想查看ARGB值是否相同,则必须比较这些值.
将您的语句更改为此ARGB值以比较值:
if (pxl.ToArgb() != Color.White.ToArgb())
Run Code Online (Sandbox Code Playgroud)
另外请确保查看Cody Gray的评论,因为您的代码绝对无效.如果效率对您很重要,请尝试不同的方法,但这超出了本问题的范围.
| 归档时间: |
|
| 查看次数: |
702 次 |
| 最近记录: |