@@ -1057,6 +1057,9 @@ else if (format == ARGB)
1057
1057
* [toxi 050728]
1058
1058
*/
1059
1059
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 );
1060
1063
int radius = (int ) (r * 3.5f );
1061
1064
if (radius < 1 ) radius = 1 ;
1062
1065
if (radius > 248 ) radius = 248 ;
@@ -1083,6 +1086,9 @@ protected void buildBlurKernel(float r) {
1083
1086
}
1084
1087
}
1085
1088
1089
+ private int safeDivide (int numerator , int denominator ) {
1090
+ return denominator == 0 ? numerator : numerator / denominator ;
1091
+ }
1086
1092
1087
1093
protected void blurAlpha (float r ) {
1088
1094
int sum , cb ;
@@ -1115,7 +1121,7 @@ protected void blurAlpha(float r) {
1115
1121
read ++;
1116
1122
}
1117
1123
ri = yi + x ;
1118
- b2 [ri ] = cb / sum ;
1124
+ b2 [ri ] = safeDivide ( cb , sum ) ;
1119
1125
}
1120
1126
yi += pixelWidth ;
1121
1127
}
@@ -1146,7 +1152,7 @@ protected void blurAlpha(float r) {
1146
1152
ri ++;
1147
1153
read += pixelWidth ;
1148
1154
}
1149
- pixels [x +yi ] = (cb / sum );
1155
+ pixels [x +yi ] = safeDivide (cb , sum );
1150
1156
}
1151
1157
yi += pixelWidth ;
1152
1158
ymi += pixelWidth ;
@@ -1191,9 +1197,9 @@ protected void blurRGB(float r) {
1191
1197
read ++;
1192
1198
}
1193
1199
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 ) ;
1197
1203
}
1198
1204
yi += pixelWidth ;
1199
1205
}
@@ -1228,7 +1234,7 @@ protected void blurRGB(float r) {
1228
1234
ri ++;
1229
1235
read += pixelWidth ;
1230
1236
}
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 ) );
1232
1238
}
1233
1239
yi += pixelWidth ;
1234
1240
ymi += pixelWidth ;
@@ -1276,10 +1282,10 @@ protected void blurARGB(float r) {
1276
1282
read ++;
1277
1283
}
1278
1284
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 ) ;
1283
1289
}
1284
1290
yi += pixelWidth ;
1285
1291
}
@@ -1315,7 +1321,7 @@ protected void blurARGB(float r) {
1315
1321
ri ++;
1316
1322
read += pixelWidth ;
1317
1323
}
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 ) );
1319
1325
}
1320
1326
yi += pixelWidth ;
1321
1327
ymi += pixelWidth ;
0 commit comments