title: Bayer Ordered Dithering
body: <p>I'm updating a plugin for Paint.net which i made some months ago, it's called Simulate Color Depth and it reduces the number of colors in the image to the chosen BPP and for a long time it have had dithering included but NEVER ordered dithering and i thought it would be a nice addition to have that in so i started to search on the internet for something useful, i ended up on this wiki page here <a href="http://en.wikipedia.org/wiki/Ordered_dithering" rel="nofollow">http://en.wikipedia.org/wiki/Ordered_dithering</a>, and tried to do as written in the pseudo code</p>
  
  <pre><code>for (int y = 0; x &lt; image.Height; y++)
  {  
      for (int x = 0; x &lt; image.Width; x++)
      {
          Color color = image.GetPixel(x, y);  
          color.R = color.R + bayer8x8[x % 8, y % 8];  
          color.G = color.G + bayer8x8[x % 8, y % 8];  
          color.B = color.B + bayer8x8[x % 8, y % 8];  
          image.SetPixel(x, y, GetClosestColor(color, bitdepth);  
      }  
  }
  </code></pre>
  
  <p>but the result is way too bright so i decided to check the wiki page again and then i see that there's a "1/65" to the right of the threshold map which got me thinking of both error diffusing (yes i know, weird huh?) and dividing the value i get from <code>bayer8x8[x % 8, y % 8]</code> with 65 and then multiply the value with the color channels, but either the results were messy or else still too bright (as i remember it) but the results were nothing like i have seen elsewhere, either too bright, too high contrast or too messy and i haven't found anything really useful searching through the internet, so do anyone know how i can get this bayer dithering working properly?</p>
  
  <p>Thanks in advance, Cookies</p>