content: package net.nullsum.audinaut.util;
  
  import android.content.Context;
  import android.graphics.Bitmap;
  import android.graphics.Canvas;
  import android.graphics.ColorMatrix;
  import android.graphics.ColorMatrixColorFilter;
  import android.graphics.Paint;
  import android.renderscript.Allocation;
  import android.renderscript.Element;
  import android.renderscript.RenderScript;
  import android.renderscript.ScriptIntrinsicBlur;
  
  class BlurBuilder {
      private static final float BITMAP_SCALE = 0.4f;
      private static final float BLUR_RADIUS = 25f;
  
      public static Bitmap blur(Context context, Bitmap image) {
          Bitmap newImage = image;
          for(int i = 0; i<3; i++) {
              newImage = blur_real(context, newImage);
          }
          newImage = changeBitmapContrastBrightness(newImage, 0.5f, 48);
          return newImage;
      }
  
      private static Bitmap blur_real(Context context, Bitmap image) {
          int width = Math.round(image.getWidth() * BITMAP_SCALE);
          int height = Math.round(image.getHeight() * BITMAP_SCALE);
  
          Bitmap inputBitmap = Bitmap.createScaledBitmap(image, width, height, false);
          Bitmap outputBitmap = Bitmap.createBitmap(inputBitmap);
  
          RenderScript rs = RenderScript.create(context);
          ScriptIntrinsicBlur theIntrinsic = ScriptIntrinsicBlur.create(rs, Element.U8_4(rs));
          Allocation tmpIn = Allocation.createFromBitmap(rs, inputBitmap);
          Allocation tmpOut = Allocation.createFromBitmap(rs, outputBitmap);
          theIntrinsic.setRadius(BLUR_RADIUS);
          theIntrinsic.setInput(tmpIn);
          theIntrinsic.forEach(tmpOut);
          tmpOut.copyTo(outputBitmap);
  
          return outputBitmap;
      }
  
      public static Bitmap changeBitmapContrastBrightness(Bitmap bmp, float contrast, float brightness)
      {
          ColorMatrix cm = new ColorMatrix(new float[]
                  {
                      contrast, 0, 0, 0, brightness,
                      0, contrast, 0, 0, brightness,
                      0, 0, contrast, 0, brightness,
                      0, 0, 0, 1, 0
                  });
  
          Bitmap ret = Bitmap.createBitmap(bmp.getWidth(), bmp.getHeight(), bmp.getConfig());
  
          Canvas canvas = new Canvas(ret);
  
          Paint paint = new Paint();
          paint.setColorFilter(new ColorMatrixColorFilter(cm));
          canvas.drawBitmap(bmp, 0, 0, paint);
  
          return ret;
      }
  }
  