【问题标题】:How to change color of Image at runtime如何在运行时更改图像的颜色
【发布时间】:2008-12-20 08:40:08
【问题描述】:

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

【问题讨论】:

  • 你需要多说一些你在做什么。 “图像”对其他人没有任何意义。
  • 您有想要处理的图片,还是因为您需要说明所选颜色?我想弄清楚的是,如果你想拍一张照片,比如说一只狗,选择绿色时会更绿。或者您只想显示一张绿色的图片。
  • 在我看来,OP 想要更改“图像”客户端的颜色。您能否更好地定义“图像”在这种情况下的含义?您是指 JPG,JPG 的边框/背景吗?

标签: c# asp.net image


【解决方案1】:

这是一个代码示例,它加载 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 中读取和写入像素的方法要快得多,但工作量要多一些。

【讨论】:

  • 将 GetPixel 结果与颜色进行比较并不总是有效的。您应该比较他们的 ToArbg() 结果,如下所示:stackoverflow.com/questions/7464994/…
  • 实际上,我不确定我的代码会永远工作。我认为即使位图的像素颜色具有与 Color.Red 完全相同的 ARGB 值,它仍然不会等同于 Color.Red。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2021-04-09
      • 2017-01-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多