@@ -1057,6 +1057,9 @@ else if (format == ARGB)
10571057 * [toxi 050728]
10581058 */
10591059 protected void buildBlurKernel (float r ) {
1060+ float maxRadius = Math .min (width , height ) / 2.0f ;
1061+ float maxR = maxRadius / 3.5f ;
1062+ r = Math .min (r , maxR );
10601063 int radius = (int ) (r * 3.5f );
10611064 if (radius < 1 ) radius = 1 ;
10621065 if (radius > 248 ) radius = 248 ;
@@ -1083,6 +1086,9 @@ protected void buildBlurKernel(float r) {
10831086 }
10841087 }
10851088
1089+ private int safeDivide (int numerator , int denominator ) {
1090+ return denominator == 0 ? numerator : numerator / denominator ;
1091+ }
10861092
10871093 protected void blurAlpha (float r ) {
10881094 int sum , cb ;
@@ -1115,7 +1121,7 @@ protected void blurAlpha(float r) {
11151121 read ++;
11161122 }
11171123 ri = yi + x ;
1118- b2 [ri ] = cb / sum ;
1124+ b2 [ri ] = safeDivide ( cb , sum ) ;
11191125 }
11201126 yi += pixelWidth ;
11211127 }
@@ -1146,7 +1152,7 @@ protected void blurAlpha(float r) {
11461152 ri ++;
11471153 read += pixelWidth ;
11481154 }
1149- pixels [x +yi ] = (cb / sum );
1155+ pixels [x +yi ] = safeDivide (cb , sum );
11501156 }
11511157 yi += pixelWidth ;
11521158 ymi += pixelWidth ;
@@ -1191,9 +1197,9 @@ protected void blurRGB(float r) {
11911197 read ++;
11921198 }
11931199 ri = yi + x ;
1194- r2 [ri ] = cr / sum ;
1195- g2 [ri ] = cg / sum ;
1196- b2 [ri ] = cb / sum ;
1200+ r2 [ri ] = safeDivide ( cr , sum ) ;
1201+ g2 [ri ] = safeDivide ( cg , sum ) ;
1202+ b2 [ri ] = safeDivide ( cb , sum ) ;
11971203 }
11981204 yi += pixelWidth ;
11991205 }
@@ -1228,7 +1234,7 @@ protected void blurRGB(float r) {
12281234 ri ++;
12291235 read += pixelWidth ;
12301236 }
1231- pixels [x +yi ] = 0xff000000 | (cr / sum )<<16 | (cg / sum )<<8 | (cb / sum );
1237+ pixels [x +yi ] = 0xff000000 | (safeDivide ( cr , sum )) <<16 | (safeDivide ( cg , sum )) <<8 | (safeDivide ( cb , sum ) );
12321238 }
12331239 yi += pixelWidth ;
12341240 ymi += pixelWidth ;
@@ -1276,10 +1282,10 @@ protected void blurARGB(float r) {
12761282 read ++;
12771283 }
12781284 ri = yi + x ;
1279- a2 [ri ] = ca / sum ;
1280- r2 [ri ] = cr / sum ;
1281- g2 [ri ] = cg / sum ;
1282- b2 [ri ] = cb / sum ;
1285+ a2 [ri ] = safeDivide ( ca , sum ) ;
1286+ r2 [ri ] = safeDivide ( cr , sum ) ;
1287+ g2 [ri ] = safeDivide ( cg , sum ) ;
1288+ b2 [ri ] = safeDivide ( cb , sum ) ;
12831289 }
12841290 yi += pixelWidth ;
12851291 }
@@ -1315,7 +1321,7 @@ protected void blurARGB(float r) {
13151321 ri ++;
13161322 read += pixelWidth ;
13171323 }
1318- pixels [x +yi ] = (ca / sum )<<24 | (cr / sum )<<16 | (cg / sum )<<8 | (cb / sum );
1324+ pixels [x +yi ] = (safeDivide ( ca , sum )) <<24 | (safeDivide ( cr , sum )) <<16 | (safeDivide ( cg , sum )) <<8 | (safeDivide ( cb , sum ) );
13191325 }
13201326 yi += pixelWidth ;
13211327 ymi += pixelWidth ;
0 commit comments