diff --git a/CHANGELOG.md b/CHANGELOG.md index fff1668f3..c819939c1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,8 @@ All notable changes to this project will be documented in this file. ## [Unreleased] +### Fixed +- GFX - DefineExternalImage2 display and correct handling if standalone ## [18.3.0] - 2023-01-01 ### Added diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/ImageTag.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/ImageTag.java index c240b3db8..9f91f5858 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/ImageTag.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/ImageTag.java @@ -306,5 +306,5 @@ public abstract class ImageTag extends DrawableTag { @Override public RECT getRectWithStrokes() { return getRect(); - } + } } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/gfx/DefineExternalImage2.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/gfx/DefineExternalImage2.java index e854242d2..2b589d752 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/gfx/DefineExternalImage2.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/gfx/DefineExternalImage2.java @@ -49,6 +49,15 @@ public class DefineExternalImage2 extends ImageTag { public int imageID; + public static final int UNKNOWN_IS_STANDALONE = 0; + public static final int UNKNOWN_HAS_SUBIMAGES = 9; + + /** + * Special unknown field. + * This seems to have value of 9 when it has DefineSubImages and in this case, + * imageId is not treated as a characterId. + * If it has value of 0, this tag is threated as standalone external image - standard character. + */ public int unknownID; public int bitmapFormat; @@ -105,7 +114,7 @@ public class DefineExternalImage2 extends ImageTag { public DefineExternalImage2(SWFInputStream sis, ByteArrayRange data) throws IOException { super(sis.getSwf(), ID, NAME, data); readData(sis, data, 0, false, false, false); - characterID = -1; + characterID = unknownID == 0 ? imageID : - 1; } public DefineExternalImage2(SWF swf) { @@ -114,7 +123,7 @@ public class DefineExternalImage2 extends ImageTag { fileName = ""; targetWidth = 1; targetHeight = 1; - unknownID = 9; //? + unknownID = UNKNOWN_HAS_SUBIMAGES; bitmapFormat = BITMAP_FORMAT_DDS; characterID = -1; createFailedImage(); @@ -223,6 +232,9 @@ public class DefineExternalImage2 extends ImageTag { @Override public String toString() { + if (unknownID == 0) { + return super.toString(); + } return tagName + " (i" + imageID + ")"; } diff --git a/src/com/jpexs/decompiler/flash/gui/Main.java b/src/com/jpexs/decompiler/flash/gui/Main.java index 45abc0c2a..d139e1913 100644 --- a/src/com/jpexs/decompiler/flash/gui/Main.java +++ b/src/com/jpexs/decompiler/flash/gui/Main.java @@ -1174,15 +1174,15 @@ public class Main { try { ret.setVal(open(new FileInputStream(selFile), selFile.getAbsolutePath(), selFile.getName())); loadedStatus.add("CUSTOM:" + selFile.getAbsolutePath()); - break; + return; } catch (Exception ex) { //ignore; } } else { - loadedStatus.add("NO"); break; } } + loadedStatus.add("NO"); } }); return ret.getVal(); diff --git a/src/com/jpexs/decompiler/flash/gui/MainPanel.java b/src/com/jpexs/decompiler/flash/gui/MainPanel.java index 431ec8785..9d756d6bd 100644 --- a/src/com/jpexs/decompiler/flash/gui/MainPanel.java +++ b/src/com/jpexs/decompiler/flash/gui/MainPanel.java @@ -5422,10 +5422,15 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se neededCopies.add(dei2); } } + ImageTag imageTagCopy = (ImageTag) imageTag.cloneTag(); imageTagCopy.setSwf(swf); int imageCharId = imageTag.getCharacterId(); + if ((imageTag instanceof DefineExternalImage2) && (((DefineExternalImage2)imageTag).unknownID > 0)) { + imageCharId = swf.getNextCharacterId(); + imageTagCopy.characterID = imageCharId; + } DefineShape2Tag shapeTag = new DefineShape2Tag(swf); int shapeCharId = imageCharId + 1; shapeTag.shapeId = shapeCharId;