Skip to content

Commit ff78d90

Browse files
authored
Merge pull request #972 from Rishab87/blur-filter-exception
Fixed blur filter throwing exception for too large values relative to image
2 parents 4a29b49 + 7c42504 commit ff78d90

File tree

1 file changed

+17
-11
lines changed

1 file changed

+17
-11
lines changed

core/src/processing/core/PImage.java

+17-11
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)