private void thresholdBlur(Kernel kernel,int[] inPixels,int[] outPixels,int width,int height,boolean alpha){
  float[] matrix=kernel.getKernelData(null);
  int cols=kernel.getWidth();
  int cols2=cols / 2;
  for (int y=0; y < height; y++) {
    int ioffset=y * width;
    int outIndex=y;
    for (int x=0; x < width; x++) {
      float r=0, g=0, b=0, a=0;
      int moffset=cols2;
      int rgb1=inPixels[ioffset + x];
      int a1=(rgb1 >> 24) & 0xff;
      int r1=(rgb1 >> 16) & 0xff;
      int g1=(rgb1 >> 8) & 0xff;
      int b1=rgb1 & 0xff;
      float af=0, rf=0, gf=0, bf=0;
      for (int col=-cols2; col <= cols2; col++) {
        float f=matrix[moffset + col];
        if (f != 0) {
          int ix=x + col;
          if (!(0 <= ix && ix < width))           ix=x;
          int rgb2=inPixels[ioffset + ix];
          int a2=(rgb2 >> 24) & 0xff;
          int r2=(rgb2 >> 16) & 0xff;
          int g2=(rgb2 >> 8) & 0xff;
          int b2=rgb2 & 0xff;
          int d;
          d=a1 - a2;
          if (d >= -threshold && d <= threshold) {
            a+=f * a2;
            af+=f;
          }
          d=r1 - r2;
          if (d >= -threshold && d <= threshold) {
            r+=f * r2;
            rf+=f;
          }
          d=g1 - g2;
          if (d >= -threshold && d <= threshold) {
            g+=f * g2;
            gf+=f;
          }
          d=b1 - b2;
          if (d >= -threshold && d <= threshold) {
            b+=f * b2;
            bf+=f;
          }
        }
      }
      a=af == 0 ? a1 : a / af;
      r=rf == 0 ? r1 : r / rf;
      g=gf == 0 ? g1 : g / gf;
      b=bf == 0 ? b1 : b / bf;
      int ia=alpha ? PixelUtils.clamp((int)(a + 0.5)) : 0xff;
      int ir=PixelUtils.clamp((int)(r + 0.5));
      int ig=PixelUtils.clamp((int)(g + 0.5));
      int ib=PixelUtils.clamp((int)(b + 0.5));
      outPixels[outIndex]=(ia << 24) | (ir << 16) | (ig << 8)| ib;
      outIndex+=height;
    }
  }
}

private void thresholdBlur ( Kernel kernel , int [ ] inPixels , int [ ] outPixels , int width , int height , boolean alpha ) { float [ ] matrix = kernel . getKernelData ( null ) ; int cols = kernel . getWidth ( ) ; int cols2 = cols / 2 ; for ( int y = 0 ; y < height ; y ++ ) { int ioffset = y * width ; int outIndex = y ; for ( int x = 0 ; x < width ; x ++ ) { float r = 0 , g = 0 , b = 0 , a = 0 ; int moffset = cols2 ; int rgb1 = inPixels [ ioffset + x ] ; int a1 = ( rgb1 > > 24 ) & 0xff ; int r1 = ( rgb1 > > 16 ) & 0xff ; int g1 = ( rgb1 > > 8 ) & 0xff ; int b1 = rgb1 & 0xff ; float af = 0 , rf = 0 , gf = 0 , bf = 0 ; for ( int col = - cols2 ; col <= cols2 ; col ++ ) { float f = matrix [ moffset + col ] ; if ( f != 0 ) { int ix = x + col ; if ( ! ( 0 <= ix && ix < width ) ) ix = x ; int rgb2 = inPixels [ ioffset + ix ] ; int a2 = ( rgb2 > > 24 ) & 0xff ; int r2 = ( rgb2 > > 16 ) & 0xff ; int g2 = ( rgb2 > > 8 ) & 0xff ; int b2 = rgb2 & 0xff ; int d ; d = a1 - a2 ; if ( d >= - threshold && d <= threshold ) { a += f * a2 ; af += f ; } d = r1 - r2 ; if ( d >= - threshold && d <= threshold ) { r += f * r2 ; rf += f ; } d = g1 - g2 ; if ( d >= - threshold && d <= threshold ) { g += f * g2 ; gf += f ; } d = b1 - b2 ; if ( d >= - threshold && d <= threshold ) { b += f * b2 ; bf += f ; } } } a = af == 0 ? a1 : a / af ; r = rf == 0 ? r1 : r / rf ; g = gf == 0 ? g1 : g / gf ; b = bf == 0 ? b1 : b / bf ; int ia = alpha ? PixelUtils . clamp ( ( int ) ( a + 0.5 ) ) : 0xff ; int ir = PixelUtils . clamp ( ( int ) ( r + 0.5 ) ) ; int ig = PixelUtils . clamp ( ( int ) ( g + 0.5 ) ) ; int ib = PixelUtils . clamp ( ( int ) ( b + 0.5 ) ) ; outPixels [ outIndex ] = ( ia << 24 ) | ( ir << 16 ) | ( ig << 8 ) | ib ; outIndex += height ; } } }
convolve with a kernel consisting of one row
