Skip to content

Instantly share code, notes, and snippets.

@esibirtseva
Created February 28, 2015 13:32
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save esibirtseva/39bf5d00ad597aa78c4b to your computer and use it in GitHub Desktop.
Save esibirtseva/39bf5d00ad597aa78c4b to your computer and use it in GitHub Desktop.
boxBlur_4 the fastest!!!
private void boxBlur_4(byte[] originalImage, byte[] blurImage, int w, int h, int r)
{
for (int i = 0; i < originalImage.Length; i++)
{
blurImage[i] = originalImage[i];
}
boxBlurH_4(blurImage, originalImage, w, h, r);
boxBlurT_4(originalImage, blurImage, w, h, r);
}
private void boxBlurH_4(byte[] originalImage, byte[] blurImage, int w, int h, int r)
{
double iarr = 1 / (r + r + 1);
for (int i = 0; i < h; i++)
{
int ti = i * w, li = ti, ri = ti + r;
byte fv = originalImage[ti], lv = originalImage[ti + w - 1];
double val = (r + 1) * fv;
for(int j = 0; j<r;j++) val+=originalImage[ti+j];
for (int j = 0; j <= r; j++)
{
val += originalImage[ri++] - fv;
blurImage[ti++] = (byte)Math.Round(val * iarr);
}
for (int j = r+1; j < w - r; j++)
{
val += originalImage[ri++] - originalImage[li++];
blurImage[ti++] = (byte)Math.Round(val * iarr);
}
for (int j = w-r; j < w; j++)
{
val += lv - originalImage[li++];
blurImage[ti++] = (byte)Math.Round(val * iarr);
}
}
}
private void boxBlurT_4(byte[] originalImage, byte[] blurImage, int w, int h, int r)
{
double iarr = 1 / (r + r + 1);
for (int i = 0; i < w; i++)
{
int ti = i, li = ti, ri = ti + r*w;
byte fv = originalImage[ti], lv = originalImage[ti + w * (h - 1)];
double val = (r + 1) * fv;
for (int j = 0; j < r; j++) val += originalImage[ti + j*w];
for (int j = 0; j <= r; j++)
{
val += originalImage[ri++] - fv;
blurImage[ti++] = (byte)Math.Round(val * iarr);
}
for (int j = r + 1; j < w - r; j++)
{
val += originalImage[ri++] - originalImage[li++];
blurImage[ti++] = (byte)Math.Round(val * iarr);
}
for (int j = w - r; j < w; j++)
{
val += lv - originalImage[li++];
blurImage[ti++] = (byte)Math.Round(val * iarr);
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment