一个图像高斯模糊的处理类

来源:互联网 发布:安川 机器人 编程 技巧 编辑:程序博客网 时间:2024/06/06 15:49

对图像进行高斯模糊的处理类,实际应用效果不错!!!

package util;import android.annotation.SuppressLint;import android.content.Context;import android.graphics.Bitmap;import android.os.Build.VERSION;import android.renderscript.Allocation;import android.renderscript.Allocation.MipmapControl;import android.renderscript.Element;import android.renderscript.RenderScript;import android.renderscript.ScriptIntrinsicBlur;import java.lang.reflect.Array;public class Blur{  private static final String TAG = "Blur";  @SuppressLint({"NewApi"})  public static Bitmap fastblur(Context paramContext, Bitmap paramBitmap, int paramInt)  {    if (Build.VERSION.SDK_INT > 16)    {      Bitmap localBitmap2 = paramBitmap.copy(paramBitmap.getConfig(), true);      RenderScript localRenderScript = RenderScript.create(paramContext);      Allocation localAllocation1 = Allocation.createFromBitmap(localRenderScript, paramBitmap, Allocation.MipmapControl.MIPMAP_NONE, 1);      Allocation localAllocation2 = Allocation.createTyped(localRenderScript, localAllocation1.getType());      ScriptIntrinsicBlur localScriptIntrinsicBlur = ScriptIntrinsicBlur.create(localRenderScript, Element.U8_4(localRenderScript));      localScriptIntrinsicBlur.setRadius(paramInt);      localScriptIntrinsicBlur.setInput(localAllocation1);      localScriptIntrinsicBlur.forEach(localAllocation2);      localAllocation2.copyTo(localBitmap2);      return localBitmap2;    }    Bitmap localBitmap1 = paramBitmap.copy(paramBitmap.getConfig(), true);    if (paramInt < 1)      return null;    int i = localBitmap1.getWidth();    int j = localBitmap1.getHeight();    int[] arrayOfInt1 = new int[i * j];    localBitmap1.getPixels(arrayOfInt1, 0, i, 0, 0, i, j);    int k = i - 1;    int m = j - 1;    int n = i * j;    int i1 = 1 + (paramInt + paramInt);    int[] arrayOfInt2 = new int[n];    int[] arrayOfInt3 = new int[n];    int[] arrayOfInt4 = new int[n];    int[] arrayOfInt5 = new int[Math.max(i, j)];    int i2 = i1 + 1 >> 1;    int i3 = i2 * i2;    int[] arrayOfInt6 = new int[i3 * 256];    for (int i4 = 0; ; i4++)    {      int i5 = i3 * 256;      if (i4 >= i5)        break;      arrayOfInt6[i4] = (i4 / i3);    }    int i6 = 0;    int i7 = 0;    int[] arrayOfInt7 = { i1, 3 };    int[][] arrayOfInt = (int[][])Array.newInstance(Integer.TYPE, arrayOfInt7);    int i8 = paramInt + 1;    for (int i9 = 0; i9 < j; i9++)    {      int i37 = 0;      int i38 = 0;      int i39 = 0;      int i40 = 0;      int i41 = 0;      int i42 = 0;      int i43 = 0;      int i44 = 0;      int i45 = 0;      int i46 = -paramInt;      if (i46 <= paramInt)      {        int i59 = arrayOfInt1[(i6 + Math.min(k, Math.max(i46, 0)))];        int[] arrayOfInt13 = arrayOfInt[(i46 + paramInt)];        arrayOfInt13[0] = ((0xFF0000 & i59) >> 16);        arrayOfInt13[1] = ((0xFF00 & i59) >> 8);        arrayOfInt13[2] = (i59 & 0xFF);        int i60 = i8 - Math.abs(i46);        i39 += i60 * arrayOfInt13[0];        i38 += i60 * arrayOfInt13[1];        i37 += i60 * arrayOfInt13[2];        if (i46 > 0)        {          i45 += arrayOfInt13[0];          i44 += arrayOfInt13[1];          i43 += arrayOfInt13[2];        }        while (true)        {          i46++;          break;          i42 += arrayOfInt13[0];          i41 += arrayOfInt13[1];          i40 += arrayOfInt13[2];        }      }      int i47 = paramInt;      for (int i48 = 0; i48 < i; i48++)      {        arrayOfInt2[i6] = arrayOfInt6[i39];        arrayOfInt3[i6] = arrayOfInt6[i38];        arrayOfInt4[i6] = arrayOfInt6[i37];        int i49 = i39 - i42;        int i50 = i38 - i41;        int i51 = i37 - i40;        int[] arrayOfInt11 = arrayOfInt[((i1 + (i47 - paramInt)) % i1)];        int i52 = i42 - arrayOfInt11[0];        int i53 = i41 - arrayOfInt11[1];        int i54 = i40 - arrayOfInt11[2];        if (i9 == 0)          arrayOfInt5[i48] = Math.min(1 + (i48 + paramInt), k);        int i55 = arrayOfInt1[(i7 + arrayOfInt5[i48])];        arrayOfInt11[0] = ((0xFF0000 & i55) >> 16);        arrayOfInt11[1] = ((0xFF00 & i55) >> 8);        arrayOfInt11[2] = (i55 & 0xFF);        int i56 = i45 + arrayOfInt11[0];        int i57 = i44 + arrayOfInt11[1];        int i58 = i43 + arrayOfInt11[2];        i39 = i49 + i56;        i38 = i50 + i57;        i37 = i51 + i58;        i47 = (i47 + 1) % i1;        int[] arrayOfInt12 = arrayOfInt[(i47 % i1)];        i42 = i52 + arrayOfInt12[0];        i41 = i53 + arrayOfInt12[1];        i40 = i54 + arrayOfInt12[2];        i45 = i56 - arrayOfInt12[0];        i44 = i57 - arrayOfInt12[1];        i43 = i58 - arrayOfInt12[2];        i6++;      }      i7 += i;    }    for (int i10 = 0; i10 < i; i10++)    {      int i11 = 0;      int i12 = 0;      int i13 = 0;      int i14 = 0;      int i15 = 0;      int i16 = 0;      int i17 = 0;      int i18 = 0;      int i19 = 0;      int i20 = i * -paramInt;      int i21 = -paramInt;      if (i21 <= paramInt)      {        int i35 = i10 + Math.max(0, i20);        int[] arrayOfInt10 = arrayOfInt[(i21 + paramInt)];        arrayOfInt10[0] = arrayOfInt2[i35];        arrayOfInt10[1] = arrayOfInt3[i35];        arrayOfInt10[2] = arrayOfInt4[i35];        int i36 = i8 - Math.abs(i21);        i13 += i36 * arrayOfInt2[i35];        i12 += i36 * arrayOfInt3[i35];        i11 += i36 * arrayOfInt4[i35];        if (i21 > 0)        {          i19 += arrayOfInt10[0];          i18 += arrayOfInt10[1];          i17 += arrayOfInt10[2];        }        while (true)        {          if (i21 < m)            i20 += i;          i21++;          break;          i16 += arrayOfInt10[0];          i15 += arrayOfInt10[1];          i14 += arrayOfInt10[2];        }      }      int i22 = i10;      int i23 = paramInt;      for (int i24 = 0; i24 < j; i24++)      {        arrayOfInt1[i22] = (0xFF000000 & arrayOfInt1[i22] | arrayOfInt6[i13] << 16 | arrayOfInt6[i12] << 8 | arrayOfInt6[i11]);        int i25 = i13 - i16;        int i26 = i12 - i15;        int i27 = i11 - i14;        int[] arrayOfInt8 = arrayOfInt[((i1 + (i23 - paramInt)) % i1)];        int i28 = i16 - arrayOfInt8[0];        int i29 = i15 - arrayOfInt8[1];        int i30 = i14 - arrayOfInt8[2];        if (i10 == 0)          arrayOfInt5[i24] = (i * Math.min(i24 + i8, m));        int i31 = i10 + arrayOfInt5[i24];        arrayOfInt8[0] = arrayOfInt2[i31];        arrayOfInt8[1] = arrayOfInt3[i31];        arrayOfInt8[2] = arrayOfInt4[i31];        int i32 = i19 + arrayOfInt8[0];        int i33 = i18 + arrayOfInt8[1];        int i34 = i17 + arrayOfInt8[2];        i13 = i25 + i32;        i12 = i26 + i33;        i11 = i27 + i34;        i23 = (i23 + 1) % i1;        int[] arrayOfInt9 = arrayOfInt[i23];        i16 = i28 + arrayOfInt9[0];        i15 = i29 + arrayOfInt9[1];        i14 = i30 + arrayOfInt9[2];        i19 = i32 - arrayOfInt9[0];        i18 = i33 - arrayOfInt9[1];        i17 = i34 - arrayOfInt9[2];        i22 += i;      }    }    localBitmap1.setPixels(arrayOfInt1, 0, i, 0, 0, i, j);    return localBitmap1;  }}
0 0