diff --git a/trunk/src/com/jpexs/decompiler/flash/gui/MainPanel.java b/trunk/src/com/jpexs/decompiler/flash/gui/MainPanel.java index db557e71e..edbfe5052 100644 --- a/trunk/src/com/jpexs/decompiler/flash/gui/MainPanel.java +++ b/trunk/src/com/jpexs/decompiler/flash/gui/MainPanel.java @@ -2029,8 +2029,15 @@ public final class MainPanel extends JPanel implements ActionListener, TreeSelec File selfile = Helper.fixDialogFile(fc.getSelectedFile()); byte[] data = Helper.readFile(selfile.getAbsolutePath()); try { - it.setImage(data); - it.getSwf().clearImageCache(); + SWF swf = it.getSwf(); + if (it instanceof DefineBitsTag) { + DefineBitsJPEG2Tag jpeg2Tag = new DefineBitsJPEG2Tag(swf, it.getOriginalData(), swf.version, it.getPos(), it.getCharacterId(), data); + swf.tags.set(swf.tags.indexOf(it), jpeg2Tag); + refreshTree(); + } else { + it.setImage(data); + } + swf.clearImageCache(); } catch (IOException ex) { Logger.getLogger(MainPanel.class.getName()).log(Level.SEVERE, "Invalid image", ex); View.showMessageDialog(null, translate("error.image.invalid"), translate("error"), JOptionPane.ERROR_MESSAGE); diff --git a/trunk/src/com/jpexs/decompiler/flash/tags/DefineBitsJPEG2Tag.java b/trunk/src/com/jpexs/decompiler/flash/tags/DefineBitsJPEG2Tag.java index 441733c5e..a6a711e11 100644 --- a/trunk/src/com/jpexs/decompiler/flash/tags/DefineBitsJPEG2Tag.java +++ b/trunk/src/com/jpexs/decompiler/flash/tags/DefineBitsJPEG2Tag.java @@ -70,6 +70,12 @@ public class DefineBitsJPEG2Tag extends ImageTag implements AloneTag { imageData = sis.readBytesEx(sis.available()); } + public DefineBitsJPEG2Tag(SWF swf, byte[] data, int version, long pos, int characterID, byte[] imageData) throws IOException { + super(swf, ID, "DefineBitsJPEG2", data, pos); + this.characterID = characterID; + this.imageData = imageData; + } + @Override public void setImage(byte[] data) { imageData = data; diff --git a/trunk/src/com/jpexs/decompiler/flash/tags/DefineBitsJPEG3Tag.java b/trunk/src/com/jpexs/decompiler/flash/tags/DefineBitsJPEG3Tag.java index edda427c4..2578e2094 100644 --- a/trunk/src/com/jpexs/decompiler/flash/tags/DefineBitsJPEG3Tag.java +++ b/trunk/src/com/jpexs/decompiler/flash/tags/DefineBitsJPEG3Tag.java @@ -44,10 +44,9 @@ public class DefineBitsJPEG3Tag extends ImageTag implements AloneTag { } @Override - public void setImage(byte[] data) { - imageData = data; + public void setImage(byte[] data) throws IOException { if (ImageTag.getImageFormat(data).equals("jpg")) { - BufferedImage image = getImage(new ArrayList()); + BufferedImage image = ImageIO.read(new ByteArrayInputStream(data)); byte[] ba = new byte[image.getWidth() * image.getHeight()]; for (int i = 0; i < ba.length; i++) { ba[i] = (byte) 255; @@ -56,6 +55,7 @@ public class DefineBitsJPEG3Tag extends ImageTag implements AloneTag { } else { bitmapAlphaData = new byte[0]; } + imageData = data; } @Override diff --git a/trunk/src/com/jpexs/decompiler/flash/tags/DefineBitsTag.java b/trunk/src/com/jpexs/decompiler/flash/tags/DefineBitsTag.java index 3f43fd20d..c6226dde5 100644 --- a/trunk/src/com/jpexs/decompiler/flash/tags/DefineBitsTag.java +++ b/trunk/src/com/jpexs/decompiler/flash/tags/DefineBitsTag.java @@ -43,7 +43,8 @@ public class DefineBitsTag extends ImageTag { @Override public boolean importSupported() { - return false; + // importing a new image will replace the current DefineBitsTag with a new DefineBitsJPEG2Tag + return true; } public DefineBitsTag(SWF swf, byte[] data, int version, long pos) throws IOException { @@ -74,7 +75,7 @@ public class DefineBitsTag extends ImageTag { getJPEGTables(tags); if ((jtt != null)) { try (ByteArrayOutputStream baos = new ByteArrayOutputStream()) { - byte[] jttdata = jtt.getData(10); + byte[] jttdata = jtt.getData(swf.version); if (jttdata.length != 0) { baos.write(jttdata, SWF.hasErrorHeader(jttdata) ? 4 : 0, jttdata.length - (SWF.hasErrorHeader(jttdata) ? 6 : 2)); baos.write(jpegData, SWF.hasErrorHeader(jpegData) ? 6 : 2, jpegData.length - (SWF.hasErrorHeader(jttdata) ? 6 : 2));