diff --git a/CHANGELOG.md b/CHANGELOG.md index 7dc344da2..5df246f58 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,7 @@ All notable changes to this project will be documented in this file. - [#2116] DefineEditText display - correct getting fonts - [#2116] DefineEditText display - apostroph decoding - [#2116] Apply colortransform after filters +- [#2116] Limit maximum number of box blur pixels ## [20.0.0] - 2023-11-05 diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/configuration/Configuration.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/configuration/Configuration.java index bff711194..338b2c8d1 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/configuration/Configuration.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/configuration/Configuration.java @@ -976,6 +976,10 @@ public final class Configuration { @ConfigurationName("formatting.tab.size") @ConfigurationCategory("format") public static ConfigurationItem tabSize = null; + + @ConfigurationDefaultInt(1000000) + @ConfigurationCategory("limit") + public static ConfigurationItem boxBlurPixelsLimit = null; private enum OSId { WINDOWS, OSX, UNIX diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/filters/Filtering.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/filters/Filtering.java index bb7b60c22..0d57516d6 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/filters/Filtering.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/filters/Filtering.java @@ -16,6 +16,7 @@ */ package com.jpexs.decompiler.flash.types.filters; +import com.jpexs.decompiler.flash.configuration.Configuration; import com.jpexs.decompiler.flash.types.RGBA; import com.jpexs.helpers.SerializableImage; import java.awt.AlphaComposite; @@ -66,7 +67,22 @@ public class Filtering { int radiusXHalf = radiusX / 2; int radiusYHalf = radiusY / 2; double divisor = radiusX * radiusY; - + + + if ((long) w * (long) h > Configuration.boxBlurPixelsLimit.get()) { + return; + } + + while (((long) radiusY * (long) radiusX * (long) w * (long) h) > Configuration.boxBlurPixelsLimit.get()) { + // decrease radius + if (radiusY > 1) { + radiusY--; + } + if (radiusX > 1) { + radiusX--; + } + } + for (int y = 0; y < h; y++) { for (int x = 0; x < w; x++) { double sumR = 0; @@ -96,7 +112,7 @@ public class Filtering { sumA += a; sumR += r; sumG += g; - sumB += b; + sumB += b; } } int da = (int) Math.floor(sumA / divisor); @@ -115,7 +131,7 @@ public class Filtering { db = 255; } - newColors[index] = RGBA.toInt(dr, dg, db, da); + newColors[index] = RGBA.toInt(dr, dg, db, da); } } for (int y = 0; y < h; y++) { diff --git a/src/com/jpexs/decompiler/flash/gui/locales/AdvancedSettingsDialog.properties b/src/com/jpexs/decompiler/flash/gui/locales/AdvancedSettingsDialog.properties index f648f75bc..34f70b4a3 100644 --- a/src/com/jpexs/decompiler/flash/gui/locales/AdvancedSettingsDialog.properties +++ b/src/com/jpexs/decompiler/flash/gui/locales/AdvancedSettingsDialog.properties @@ -747,4 +747,7 @@ config.description.flaExportUseMappedFontLayout = Use assigned source font advan #after 20.0.0 config.name.formatting.tab.size = Tab size -config.description.formatting.tab.size = Number of spaces per tab \ No newline at end of file +config.description.formatting.tab.size = Number of spaces per tab + +config.name.boxBlurPixelsLimit = Box blur filter pixels limit +config.description.boxBlurPixelsLimit = Maximum number of pixels to calculate boxblur filter. If the number of pixels is greater, then blurring is skipped. diff --git a/src/com/jpexs/decompiler/flash/gui/locales/AdvancedSettingsDialog_cs.properties b/src/com/jpexs/decompiler/flash/gui/locales/AdvancedSettingsDialog_cs.properties index 1893d6532..3cf5ec1e1 100644 --- a/src/com/jpexs/decompiler/flash/gui/locales/AdvancedSettingsDialog_cs.properties +++ b/src/com/jpexs/decompiler/flash/gui/locales/AdvancedSettingsDialog_cs.properties @@ -737,4 +737,7 @@ config.description.flaExportUseMappedFontLayout = B\u011bhem FLA exportu pou\u01 #after 20.0.0 config.name.formatting.tab.size = Velikost tabel\u00e1toru -config.description.formatting.tab.size = Po\u010det mezer v tabel\u00e1toru \ No newline at end of file +config.description.formatting.tab.size = Po\u010det mezer v tabel\u00e1toru + +config.name.boxBlurPixelsLimit = Limit pixel\u016f box blur filtru +config.description.boxBlurPixelsLimit = Maxim\u00e1ln\u00ed po\u010det pixel\u016f pro v\u00fdpo\u010det boxblur filtru. Pokud je po\u010det pixel\u016f v\u011bt\u0161\u00ed, blur je p\u0159esko\u010den.