.class public Lcom/moji/tool/FastBlur; .super Ljava/lang/Object; .source "FastBlur.java" # direct methods .method public constructor ()V .locals 0 .line 12 invoke-direct {p0}, Ljava/lang/Object;->()V return-void .end method .method public static a(Landroid/graphics/Bitmap;IFZ)Landroid/graphics/Bitmap; .locals 4 .line 16 :try_start_0 invoke-virtual {p0}, Landroid/graphics/Bitmap;->getWidth()I move-result v0 int-to-float v0, v0 div-float/2addr v0, p2 float-to-int v0, v0 invoke-virtual {p0}, Landroid/graphics/Bitmap;->getHeight()I move-result v1 int-to-float v1, v1 div-float/2addr v1, p2 float-to-int v1, v1 sget-object v2, Landroid/graphics/Bitmap$Config;->ARGB_8888:Landroid/graphics/Bitmap$Config; invoke-static {v0, v1, v2}, Landroid/graphics/Bitmap;->createBitmap(IILandroid/graphics/Bitmap$Config;)Landroid/graphics/Bitmap; move-result-object v0 .line 17 new-instance v1, Landroid/graphics/Canvas; invoke-direct {v1, v0}, Landroid/graphics/Canvas;->(Landroid/graphics/Bitmap;)V const/high16 v2, 0x3f800000 # 1.0f div-float/2addr v2, p2 .line 18 invoke-virtual {v1, v2, v2}, Landroid/graphics/Canvas;->scale(FF)V .line 19 new-instance v2, Landroid/graphics/Paint; const/4 v3, 0x2 invoke-direct {v2, v3}, Landroid/graphics/Paint;->(I)V const/4 v3, 0x0 .line 20 invoke-virtual {v1, p0, v3, v3, v2}, Landroid/graphics/Canvas;->drawBitmap(Landroid/graphics/Bitmap;FFLandroid/graphics/Paint;)V if-eqz p3, :cond_0 const/high16 p3, -0x67000000 .line 22 invoke-virtual {v1, p3}, Landroid/graphics/Canvas;->drawColor(I)V :cond_0 int-to-float p1, p1 div-float/2addr p1, p2 float-to-int p1, p1 const/4 p2, 0x1 .line 24 invoke-static {v0, p1, p2}, Lcom/moji/tool/FastBlur;->a(Landroid/graphics/Bitmap;IZ)Landroid/graphics/Bitmap; move-result-object p1 :try_end_0 .catch Ljava/lang/OutOfMemoryError; {:try_start_0 .. :try_end_0} :catch_0 return-object p1 :catch_0 move-exception p1 const-string p2, "FASTBLUR" .line 26 invoke-static {p2, p1}, Lcom/moji/tool/log/MJLogger;->a(Ljava/lang/String;Ljava/lang/Throwable;)V return-object p0 .end method .method public static a(Landroid/graphics/Bitmap;IZ)Landroid/graphics/Bitmap; .locals 38 move-object/from16 v1, p0 move/from16 v0, p1 const/4 v2, 0x1 if-eqz p2, :cond_0 move-object v3, v1 goto :goto_0 .line 38 :cond_0 :try_start_0 invoke-virtual/range {p0 .. p0}, Landroid/graphics/Bitmap;->getConfig()Landroid/graphics/Bitmap$Config; move-result-object v3 invoke-virtual {v1, v3, v2}, Landroid/graphics/Bitmap;->copy(Landroid/graphics/Bitmap$Config;Z)Landroid/graphics/Bitmap; move-result-object v3 :goto_0 if-ge v0, v2, :cond_1 const/4 v0, 0x0 return-object v0 .line 45 :cond_1 invoke-virtual {v3}, Landroid/graphics/Bitmap;->getWidth()I move-result v12 .line 46 invoke-virtual {v3}, Landroid/graphics/Bitmap;->getHeight()I move-result v13 mul-int v14, v12, v13 .line 48 new-array v15, v14, [I const/4 v6, 0x0 const/4 v8, 0x0 const/4 v9, 0x0 move-object v4, v3 move-object v5, v15 move v7, v12 move v10, v12 move v11, v13 .line 49 invoke-virtual/range {v4 .. v11}, Landroid/graphics/Bitmap;->getPixels([IIIIIII)V add-int/lit8 v4, v12, -0x1 add-int/lit8 v5, v13, -0x1 add-int v6, v0, v0 add-int/2addr v6, v2 .line 56 new-array v7, v14, [I .line 57 new-array v8, v14, [I .line 58 new-array v9, v14, [I .line 60 invoke-static {v12, v13}, Ljava/lang/Math;->max(II)I move-result v10 new-array v10, v10, [I add-int/lit8 v11, v6, 0x1 shr-int/2addr v11, v2 mul-int v11, v11, v11 mul-int/lit16 v14, v11, 0x100 .line 64 new-array v2, v14, [I const/4 v1, 0x0 :goto_1 if-ge v1, v14, :cond_2 .line 66 div-int v18, v1, v11 aput v18, v2, v1 add-int/lit8 v1, v1, 0x1 goto :goto_1 :cond_2 const/4 v1, 0x3 .line 71 filled-new-array {v6, v1}, [I move-result-object v1 const-class v11, I invoke-static {v11, v1}, Ljava/lang/reflect/Array;->newInstance(Ljava/lang/Class;[I)Ljava/lang/Object; move-result-object v1 check-cast v1, [[I add-int/lit8 v11, v0, 0x1 const/4 v14, 0x0 const/16 v18, 0x0 const/16 v19, 0x0 :goto_2 const/16 v20, 0x2 if-ge v14, v13, :cond_7 move-object/from16 v21, v3 neg-int v3, v0 const/16 v22, 0x0 const/16 v23, 0x0 const/16 v24, 0x0 const/16 v25, 0x0 const/16 v26, 0x0 const/16 v27, 0x0 const/16 v28, 0x0 const/16 v29, 0x0 const/16 v30, 0x0 :goto_3 const v31, 0xff00 const/high16 v32, 0xff0000 if-gt v3, v0, :cond_4 move/from16 v34, v5 move/from16 v33, v13 const/4 v13, 0x0 .line 83 invoke-static {v3, v13}, Ljava/lang/Math;->max(II)I move-result v5 invoke-static {v4, v5}, Ljava/lang/Math;->min(II)I move-result v5 add-int v5, v18, v5 aget v5, v15, v5 add-int v13, v3, v0 .line 84 aget-object v13, v1, v13 and-int v32, v5, v32 shr-int/lit8 v32, v32, 0x10 const/16 v17, 0x0 .line 85 aput v32, v13, v17 and-int v31, v5, v31 shr-int/lit8 v31, v31, 0x8 const/16 v16, 0x1 .line 86 aput v31, v13, v16 and-int/lit16 v5, v5, 0xff .line 87 aput v5, v13, v20 .line 88 invoke-static {v3}, Ljava/lang/Math;->abs(I)I move-result v5 sub-int v5, v11, v5 const/16 v17, 0x0 .line 89 aget v31, v13, v17 mul-int v31, v31, v5 add-int v22, v22, v31 const/16 v16, 0x1 .line 90 aget v31, v13, v16 mul-int v31, v31, v5 add-int v23, v23, v31 .line 91 aget v31, v13, v20 mul-int v31, v31, v5 add-int v24, v24, v31 if-lez v3, :cond_3 const/4 v5, 0x0 .line 93 aget v31, v13, v5 add-int v25, v25, v31 const/4 v5, 0x1 .line 94 aget v31, v13, v5 add-int v27, v27, v31 .line 95 aget v5, v13, v20 add-int v29, v29, v5 goto :goto_4 :cond_3 const/4 v5, 0x0 .line 97 aget v31, v13, v5 add-int v26, v26, v31 const/4 v5, 0x1 .line 98 aget v31, v13, v5 add-int v28, v28, v31 .line 99 aget v5, v13, v20 add-int v30, v30, v5 :goto_4 add-int/lit8 v3, v3, 0x1 move/from16 v13, v33 move/from16 v5, v34 goto :goto_3 :cond_4 move/from16 v34, v5 move/from16 v33, v13 move v5, v0 const/4 v3, 0x0 :goto_5 if-ge v3, v12, :cond_6 .line 106 aget v13, v2, v22 aput v13, v7, v18 .line 107 aget v13, v2, v23 aput v13, v8, v18 .line 108 aget v13, v2, v24 aput v13, v9, v18 sub-int v22, v22, v26 sub-int v23, v23, v28 sub-int v24, v24, v30 sub-int v13, v5, v0 add-int/2addr v13, v6 .line 115 rem-int/2addr v13, v6 aget-object v13, v1, v13 const/16 v17, 0x0 .line 117 aget v35, v13, v17 sub-int v26, v26, v35 const/16 v16, 0x1 .line 118 aget v35, v13, v16 sub-int v28, v28, v35 .line 119 aget v35, v13, v20 sub-int v30, v30, v35 if-nez v14, :cond_5 add-int v35, v3, v0 move-object/from16 v36, v2 add-int/lit8 v2, v35, 0x1 .line 122 invoke-static {v2, v4}, Ljava/lang/Math;->min(II)I move-result v2 aput v2, v10, v3 goto :goto_6 :cond_5 move-object/from16 v36, v2 .line 124 :goto_6 aget v2, v10, v3 add-int v2, v19, v2 aget v2, v15, v2 and-int v35, v2, v32 shr-int/lit8 v35, v35, 0x10 const/16 v17, 0x0 .line 126 aput v35, v13, v17 and-int v35, v2, v31 shr-int/lit8 v35, v35, 0x8 const/16 v16, 0x1 .line 127 aput v35, v13, v16 and-int/lit16 v2, v2, 0xff .line 128 aput v2, v13, v20 .line 130 aget v2, v13, v17 add-int v25, v25, v2 .line 131 aget v2, v13, v16 add-int v27, v27, v2 .line 132 aget v2, v13, v20 add-int v29, v29, v2 add-int v22, v22, v25 add-int v23, v23, v27 add-int v24, v24, v29 add-int/lit8 v5, v5, 0x1 .line 138 rem-int/2addr v5, v6 .line 139 rem-int v2, v5, v6 aget-object v2, v1, v2 const/4 v13, 0x0 .line 141 aget v17, v2, v13 add-int v26, v26, v17 const/16 v16, 0x1 .line 142 aget v17, v2, v16 add-int v28, v28, v17 .line 143 aget v17, v2, v20 add-int v30, v30, v17 .line 145 aget v35, v2, v13 sub-int v25, v25, v35 .line 146 aget v13, v2, v16 sub-int v27, v27, v13 .line 147 aget v2, v2, v20 sub-int v29, v29, v2 add-int/lit8 v18, v18, 0x1 add-int/lit8 v3, v3, 0x1 move-object/from16 v2, v36 goto/16 :goto_5 :cond_6 move-object/from16 v36, v2 add-int v19, v19, v12 add-int/lit8 v14, v14, 0x1 move-object/from16 v3, v21 move/from16 v13, v33 move/from16 v5, v34 goto/16 :goto_2 :cond_7 move-object/from16 v36, v2 move-object/from16 v21, v3 move/from16 v34, v5 move/from16 v33, v13 const/4 v2, 0x0 :goto_7 if-ge v2, v12, :cond_d neg-int v3, v0 mul-int v4, v3, v12 const/4 v5, 0x0 const/4 v13, 0x0 const/4 v14, 0x0 const/16 v18, 0x0 const/16 v19, 0x0 const/16 v22, 0x0 const/16 v23, 0x0 const/16 v24, 0x0 const/16 v25, 0x0 :goto_8 if-gt v3, v0, :cond_a move-object/from16 v37, v10 const/4 v10, 0x0 .line 157 invoke-static {v10, v4}, Ljava/lang/Math;->max(II)I move-result v17 add-int v26, v17, v2 add-int v17, v3, v0 .line 159 aget-object v27, v1, v17 .line 161 aget v17, v7, v26 aput v17, v27, v10 .line 162 aget v10, v8, v26 const/16 v16, 0x1 aput v10, v27, v16 .line 163 aget v10, v9, v26 aput v10, v27, v20 .line 165 invoke-static {v3}, Ljava/lang/Math;->abs(I)I move-result v10 sub-int v10, v11, v10 .line 167 aget v28, v7, v26 mul-int v28, v28, v10 add-int v5, v5, v28 .line 168 aget v28, v8, v26 mul-int v28, v28, v10 add-int v13, v13, v28 .line 169 aget v26, v9, v26 mul-int v26, v26, v10 add-int v14, v14, v26 if-lez v3, :cond_8 const/4 v10, 0x0 .line 172 aget v26, v27, v10 add-int v18, v18, v26 const/4 v10, 0x1 .line 173 aget v26, v27, v10 add-int v22, v22, v26 .line 174 aget v10, v27, v20 add-int v24, v24, v10 :goto_9 move/from16 v10, v34 goto :goto_a :cond_8 const/4 v10, 0x0 .line 176 aget v26, v27, v10 add-int v19, v19, v26 const/4 v10, 0x1 .line 177 aget v26, v27, v10 add-int v23, v23, v26 .line 178 aget v10, v27, v20 add-int v25, v25, v10 goto :goto_9 :goto_a if-ge v3, v10, :cond_9 add-int/2addr v4, v12 :cond_9 add-int/lit8 v3, v3, 0x1 move/from16 v34, v10 move-object/from16 v10, v37 goto :goto_8 :cond_a move-object/from16 v37, v10 move/from16 v10, v34 move/from16 v26, v22 move/from16 v27, v24 move/from16 v3, v33 const/4 v4, 0x0 move/from16 v22, v0 move/from16 v24, v18 move/from16 v18, v14 move v14, v13 move v13, v5 move v5, v2 :goto_b if-ge v4, v3, :cond_c const/high16 v28, -0x1000000 .line 189 aget v29, v15, v5 and-int v28, v29, v28 aget v29, v36, v13 shl-int/lit8 v29, v29, 0x10 or-int v28, v28, v29 aget v29, v36, v14 shl-int/lit8 v29, v29, 0x8 or-int v28, v28, v29 aget v29, v36, v18 or-int v28, v28, v29 aput v28, v15, v5 sub-int v13, v13, v19 sub-int v14, v14, v23 sub-int v18, v18, v25 sub-int v28, v22, v0 add-int v28, v28, v6 .line 197 rem-int v28, v28, v6 aget-object v28, v1, v28 const/16 v17, 0x0 .line 199 aget v29, v28, v17 sub-int v19, v19, v29 const/16 v16, 0x1 .line 200 aget v29, v28, v16 sub-int v23, v23, v29 .line 201 aget v29, v28, v20 sub-int v25, v25, v29 if-nez v2, :cond_b add-int v0, v4, v11 .line 204 invoke-static {v0, v10}, Ljava/lang/Math;->min(II)I move-result v0 mul-int v0, v0, v12 aput v0, v37, v4 .line 206 :cond_b aget v0, v37, v4 add-int/2addr v0, v2 .line 208 aget v29, v7, v0 const/16 v17, 0x0 aput v29, v28, v17 .line 209 aget v29, v8, v0 const/16 v16, 0x1 aput v29, v28, v16 .line 210 aget v0, v9, v0 aput v0, v28, v20 .line 212 aget v0, v28, v17 add-int v24, v24, v0 .line 213 aget v0, v28, v16 add-int v26, v26, v0 .line 214 aget v0, v28, v20 add-int v27, v27, v0 add-int v13, v13, v24 add-int v14, v14, v26 add-int v18, v18, v27 add-int/lit8 v22, v22, 0x1 .line 220 rem-int v22, v22, v6 .line 221 aget-object v0, v1, v22 const/16 v17, 0x0 .line 223 aget v28, v0, v17 add-int v19, v19, v28 const/16 v16, 0x1 .line 224 aget v28, v0, v16 add-int v23, v23, v28 .line 225 aget v28, v0, v20 add-int v25, v25, v28 .line 227 aget v28, v0, v17 sub-int v24, v24, v28 .line 228 aget v28, v0, v16 sub-int v26, v26, v28 .line 229 aget v0, v0, v20 sub-int v27, v27, v0 add-int/2addr v5, v12 add-int/lit8 v4, v4, 0x1 move/from16 v0, p1 goto/16 :goto_b :cond_c const/16 v16, 0x1 const/16 v17, 0x0 add-int/lit8 v2, v2, 0x1 move/from16 v33, v3 move/from16 v34, v10 move-object/from16 v10, v37 move/from16 v0, p1 goto/16 :goto_7 :cond_d move/from16 v3, v33 const/4 v6, 0x0 const/4 v8, 0x0 const/4 v9, 0x0 move-object/from16 v4, v21 move-object v5, v15 move v7, v12 move v10, v12 move v11, v3 .line 235 invoke-virtual/range {v4 .. v11}, Landroid/graphics/Bitmap;->setPixels([IIIIIII)V :try_end_0 .catch Ljava/lang/Exception; {:try_start_0 .. :try_end_0} :catch_1 .catch Ljava/lang/OutOfMemoryError; {:try_start_0 .. :try_end_0} :catch_0 return-object v21 :catch_0 move-exception v0 const-string v1, "FASTBLUR" .line 241 invoke-static {v1, v0}, Lcom/moji/tool/log/MJLogger;->a(Ljava/lang/String;Ljava/lang/Throwable;)V .line 242 invoke-static {}, Ljava/lang/System;->gc()V goto :goto_c :catch_1 move-exception v0 const-string v1, "FASTBLUR" .line 239 invoke-static {v1, v0}, Lcom/moji/tool/log/MJLogger;->a(Ljava/lang/String;Ljava/lang/Throwable;)V :goto_c move-object/from16 v1, p0 return-object v1 .end method