title: Sharpen on a Bitmap using C#
body: <p>I want to put a sharpen filter on an image. I have found a web <a href="http://www.student.kuleuven.be/~m0216922/CG/filtering.html" rel="noreferrer">with short tutorial</a>.
  I tried to do it in C# so here is my code. Anyway, I tried to find out why it is not working. I do not know if I am doing something wrong, if yes, please advise me what to do to make it work as it should be. Thanks</p>
  
  <pre><code>        public static Bitmap sharpen(Bitmap image)
      {
          Bitmap sharpenImage = new Bitmap(image.Width, image.Height);
  
          int filterWidth = 3;
          int filterHeight = 3;
          int w = image.Width;
          int h = image.Height;
  
          double[,] filter = new double[filterWidth, filterHeight];
  
          filter[0, 0] = filter[0, 1] = filter[0, 2] = filter[1, 0] = filter[1, 2] = filter[2, 0] = filter[2, 1] = filter[2, 2] = -1;
          filter[1, 1] = 9;
  
          double factor = 1.0;
          double bias = 0.0;
  
          Color[,] result = new Color[image.Width, image.Height];
  
          for (int x = 0; x &lt; w; ++x)
          {
              for (int y = 0; y &lt; h; ++y)
              {
                  double red = 0.0, green = 0.0, blue = 0.0;
                  Color imageColor = image.GetPixel(x, y);
  
                  for (int filterX = 0; filterX &lt; filterWidth; filterX++)
                  {
                      for (int filterY = 0; filterY &lt; filterHeight; filterY++)
                      {
                          int imageX = (x - filterWidth / 2 + filterX + w) % w;
                          int imageY = (y - filterHeight / 2 + filterY + h) % h;
                          red += imageColor.R * filter[filterX, filterY];
                          green += imageColor.G * filter[filterX, filterY];
                          blue += imageColor.B * filter[filterX, filterY];
                      }
                      int r = Math.Min(Math.Max((int)(factor * red + bias), 0), 255);
                      int g = Math.Min(Math.Max((int)(factor * green + bias), 0), 255);
                      int b = Math.Min(Math.Max((int)(factor * blue + bias), 0), 255);
  
                      result[x, y] = Color.FromArgb(r, g, b);
                  }
              }
          }
          for (int i = 0; i &lt; w; ++i)
          {
              for (int j = 0; j &lt; h; ++j)
              {
                  sharpenImage.SetPixel(i, j, result[i, j]);
              }
          }
          return sharpenImage;
      }
  </code></pre>