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

3

我想知道是否有方法可以在运行时更改图像颜色,例如,假设我有一个绑定到ASP.Net Image控件的JPG。接下来,我有一个下拉列表,它给出不同的颜色选项,如红色,绿色等。现在我想将图像的颜色更改为下拉列表中选择的颜色。


你需要更详细地说明你正在做什么。对于其他人来说,“这张图片”并没有任何意义。 - Will Dean
你有想要处理的图片吗,还是因为需要说明所选颜色?我想要弄清楚的是,如果你想让一张狗的图片在选择绿色时更加绿色,还是只想展示一张绿色的图片。 - Tom Jelen
听起来像是OP想要在客户端更改“图像”的颜色。您能更好地定义在此上下文中“图像”的含义吗?您是指JPG,还是指JPG的边框/背景? - Russ Cam
3个回答

12

这是一个加载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;

警告:GetPixel和SetPixel非常慢。如果您的图像很大或性能是一个问题,.NET中有一种更快的方式来读写像素,但需要付出更多的努力。


1
比较 GetPixel 方法的结果和颜色并不总是有效。应该比较它们的 ToArgb() 结果,如此处所示:https://dev59.com/5VvUa4cB1Zd3GeqPtGVF - FoppyOmega
其实,我不确定我的代码是否会永远工作。 我认为即使位图的像素颜色具有完全相同的ARGB值,它仍然不等同于Color.Red。 - MusiGenesis

0

你也可以尝试在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);
  }

-1

我也遇到了解决这个问题的困难。在获取了一些信息后,我手动编写了代码。现在它运行良好。如果你想检查一下,可以使用它。

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

你可以简单地使用这段代码。就是这样,==>

string str; 
OpenFileDialog od = new OpenFileDialog(); 
if (od.ShowDialog() == DialogResult.OK) 
{ 
    str = od.FileName;
    this.BackgroundImage=Image.FromFile(str); 
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接