From 5abdf60a24b18c8fc4552024b2621f1ad2a3b3ec Mon Sep 17 00:00:00 2001 From: Honfika Date: Wed, 22 Jan 2014 18:41:43 +0100 Subject: [PATCH] #481 Image exporting fixed (DefineBitsJPEG2/3 erroneous header) --- trunk/src/com/jpexs/decompiler/flash/SWFInputStream.java | 2 +- .../jpexs/decompiler/flash/tags/DefineBitsJPEG2Tag.java | 3 +++ .../jpexs/decompiler/flash/tags/DefineBitsJPEG3Tag.java | 7 ++++++- .../decompiler/flash/types/shaperecords/SHAPERECORD.java | 4 +++- 4 files changed, 13 insertions(+), 3 deletions(-) diff --git a/trunk/src/com/jpexs/decompiler/flash/SWFInputStream.java b/trunk/src/com/jpexs/decompiler/flash/SWFInputStream.java index 8d31eb678..8c6b28309 100644 --- a/trunk/src/com/jpexs/decompiler/flash/SWFInputStream.java +++ b/trunk/src/com/jpexs/decompiler/flash/SWFInputStream.java @@ -171,7 +171,7 @@ public class SWFInputStream extends InputStream { * * @param pos Number of bytes */ - public void seek(int pos) throws IOException { + public void seek(long pos) throws IOException { if (is instanceof SeekableInputStream) { SeekableInputStream sis = (SeekableInputStream) is; sis.seek(pos); diff --git a/trunk/src/com/jpexs/decompiler/flash/tags/DefineBitsJPEG2Tag.java b/trunk/src/com/jpexs/decompiler/flash/tags/DefineBitsJPEG2Tag.java index 842c9229d..3cfffc0af 100644 --- a/trunk/src/com/jpexs/decompiler/flash/tags/DefineBitsJPEG2Tag.java +++ b/trunk/src/com/jpexs/decompiler/flash/tags/DefineBitsJPEG2Tag.java @@ -48,6 +48,9 @@ public class DefineBitsJPEG2Tag extends ImageTag implements AloneTag { @Override public BufferedImage getImage(List tags) { try { + if (SWF.hasErrorHeader(imageData)) { + return ImageIO.read(new ByteArrayInputStream(imageData, 4, imageData.length - 4)); + } return ImageIO.read(new ByteArrayInputStream(imageData)); } catch (IOException ex) { } diff --git a/trunk/src/com/jpexs/decompiler/flash/tags/DefineBitsJPEG3Tag.java b/trunk/src/com/jpexs/decompiler/flash/tags/DefineBitsJPEG3Tag.java index 1230d4883..c0b25ddd1 100644 --- a/trunk/src/com/jpexs/decompiler/flash/tags/DefineBitsJPEG3Tag.java +++ b/trunk/src/com/jpexs/decompiler/flash/tags/DefineBitsJPEG3Tag.java @@ -69,7 +69,12 @@ public class DefineBitsJPEG3Tag extends ImageTag implements AloneTag { @Override public BufferedImage getImage(List tags) { try { - BufferedImage img = ImageIO.read(new ByteArrayInputStream(imageData)); + BufferedImage img; + if (SWF.hasErrorHeader(imageData)) { + img = ImageIO.read(new ByteArrayInputStream(imageData, 4, imageData.length - 4)); + } else { + img = ImageIO.read(new ByteArrayInputStream(imageData)); + } if (bitmapAlphaData.length == 0) { return img; } diff --git a/trunk/src/com/jpexs/decompiler/flash/types/shaperecords/SHAPERECORD.java b/trunk/src/com/jpexs/decompiler/flash/types/shaperecords/SHAPERECORD.java index 9e26d8a8b..b948be0bb 100644 --- a/trunk/src/com/jpexs/decompiler/flash/types/shaperecords/SHAPERECORD.java +++ b/trunk/src/com/jpexs/decompiler/flash/types/shaperecords/SHAPERECORD.java @@ -188,7 +188,9 @@ public abstract class SHAPERECORD implements Cloneable, NeedsCharacters, Seriali btrans.preConcatenate(AffineTransform.getTranslateInstance(startX / DESCALE, startY / DESCALE)); g.setTransform(btrans); BufferedImage img = image.getImage(tags); - g.setPaint(new TexturePaint(img, new Rectangle(img.getWidth(), img.getHeight()))); + if (img != null) { + g.setPaint(new TexturePaint(img, new Rectangle(img.getWidth(), img.getHeight()))); + } g.fill(new Rectangle(-16384 * maxRepeat, -16384 * maxRepeat, 16384 * 2 * maxRepeat, 16384 * 2 * maxRepeat)); g.setTransform(oldAf); g.setClip(null);