C# 如何在运行时更改图像的颜色

C# 如何在运行时更改图像的颜色,c#,asp.net,image,C#,Asp.net,Image,我想知道是否有任何方法可以在运行时更改图像颜色。 例如,让我们假设我有一个JPG绑定到ASP.Net的图像控件。接下来,我有一个下拉列表,它为我提供了各种颜色选项,如红色、绿色等。我现在想将图像的颜色更改为下拉列表中选择的颜色。下面是一个代码示例,加载JPEG,将图像中的任何红色像素更改为蓝色,然后在图片框中显示位图: Bitmap bmp = (Bitmap)Bitmap.FromFile("image.jpg"); for (int x = 0; x < bmp.Width; x++)

我想知道是否有任何方法可以在运行时更改图像颜色。
例如,让我们假设我有一个JPG绑定到ASP.Net的图像控件。接下来,我有一个下拉列表,它为我提供了各种颜色选项,如红色、绿色等。我现在想将图像的颜色更改为下拉列表中选择的颜色。

下面是一个代码示例,加载JPEG,将图像中的任何红色像素更改为蓝色,然后在图片框中显示位图:

Bitmap bmp = (Bitmap)Bitmap.FromFile("image.jpg");
for (int x = 0; x < bmp.Width; x++)
{
    for (int y = 0; y < bmp.Height; y++)
    {
        if (bmp.GetPixel(x, y) == Color.Red)
        {
            bmp.SetPixel(x, y, Color.Blue);
        }
    }
}
pictureBox1.Image = bmp;
Bitmap bmp=(Bitmap)Bitmap.FromFile(“image.jpg”);
对于(int x=0;x

警告:GetPixel和SetPixel速度非常慢。如果您的图像很大,并且/或者性能有问题,那么有一种更快的方法可以在.NET中读取和写入像素,但这需要更多的工作。

我也面临着这个问题的困扰。之后,根据一些信息。我手工编写了代码,现在它运行良好。如果你想检查,你可以用它

用于在C#.net中运行时更改背景图像的代码

您可以简单地使用此代码。也就是说,==>

string str; 
OpenFileDialog od = new OpenFileDialog(); 
if (od.ShowDialog() == DialogResult.OK) 
{ 
    str = od.FileName;
    this.BackgroundImage=Image.FromFile(str); 
}
您也可以在web(asp.net)上尝试此操作,您可以忽略此逻辑,但可以看到getpixel和setpixel正在做什么

 public string FileUpload( HttpPostedFileBase file )
  {
     Bitmap bmp = new Bitmap(file.InputStream);
     string valid = "";

     for(int i = 0; i < bmp.Width; i++) {
        for(int j = 0; j < bmp.Height; j++) {
           if(bmp.GetPixel(i , j).B < 20) {
              if(bmp.GetPixel(i , j).B == bmp.GetPixel(i , j).G &&
                 bmp.GetPixel(i , j).B == bmp.GetPixel(i , j).R) {
                 valid = valid + bmp.GetPixel(i , j). + "<br/>";
                 bmp.SetPixel(i , j , Color.DarkGreen);
              }
           }
        }
     }

     SaveImage(bmp);

     return valid;
  }

  private void SaveImage( Bitmap newbmp )
  {
     string path = Path.Combine(Server.MapPath("~/Images") , "ScaledImage.jpeg");
     newbmp.Save(path , System.Drawing.Imaging.ImageFormat.Jpeg);
  }
公共字符串文件上载(HttpPostedFileBase文件)
{
位图bmp=新位图(file.InputStream);
字符串valid=“”;
对于(int i=0;i”;
设置像素(i,j,Color.DarkGreen);
}
}
}
}
保存图像(bmp);
返回有效;
}
私有void SaveImage(位图newbmp)
{
字符串path=path.Combine(Server.MapPath(“~/Images”),“ScaledImage.jpeg”);
保存(路径、系统、绘图、成像、图像格式、Jpeg);
}

你需要更多地说明你在做什么。“图像”对任何人都没有任何意义。你是否有一张你想要处理的图片,或者是因为你需要说明所选的颜色?我想弄明白的是,如果你想拍一张照片,比如说一只狗,当绿色被选中时,它会变得更绿。或者你只想显示一张绿色的图片。我觉得OP好像想改变“图像”客户端的颜色。你能更好地定义“图像”在这个上下文中的含义吗?你是说JPG,JPG的边框/背景吗?将GetPixel结果与颜色进行比较并不总是有效的。您应该将它们的ToArbg()结果进行比较,如下所示:实际上,我不确定我的代码是否能正常工作。我认为,即使位图的像素颜色与color.Red具有完全相同的ARGB值,它仍然不等同于color.Red。