From b2da5a46e09eba13d0f2ae17ab249eb1ced66bc1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jindra=20Pet=C5=99=C3=ADk?= Date: Wed, 21 Dec 2022 22:21:10 +0100 Subject: [PATCH] Fix old image with alpha export mode --- .../flash/exporters/ImageExporter.java | 8 +++++++ .../flash/tags/DefineBitsJPEG4Tag.java | 24 +++++++++---------- 2 files changed, 20 insertions(+), 12 deletions(-) diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/ImageExporter.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/ImageExporter.java index a3b72dffb..d21464db2 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/ImageExporter.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/ImageExporter.java @@ -83,6 +83,14 @@ public class ImageExporter { ImageFormat fileFormat = imageTag.getOriginalImageFormat(); ImageFormat originalFormat = fileFormat; + boolean hasSeparateAlpha = false; + if (imageTag instanceof HasSeparateAlphaChannel) { + HasSeparateAlphaChannel hsac = (HasSeparateAlphaChannel)imageTag; + hasSeparateAlpha = hsac.hasAlphaChannel(); + } + if (settings.mode == ImageExportMode.PNG_GIF_JPEG && hasSeparateAlpha) { + fileFormat = ImageFormat.PNG; + } if (settings.mode == ImageExportMode.PNG) { fileFormat = ImageFormat.PNG; } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineBitsJPEG4Tag.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineBitsJPEG4Tag.java index 1367a3ebc..6b5cde187 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineBitsJPEG4Tag.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineBitsJPEG4Tag.java @@ -166,7 +166,7 @@ public class DefineBitsJPEG4Tag extends ImageTag implements AloneTag, HasSeparat clearCache(); setModified(true); } - + @Override public boolean hasAlphaChannel() { return bitmapAlphaData.getLength() > 0; @@ -188,19 +188,19 @@ public class DefineBitsJPEG4Tag extends ImageTag implements AloneTag, HasSeparat @Override public InputStream getOriginalImageData() { - if (bitmapAlphaData.getLength() == 0) { // No alpha + //if (bitmapAlphaData.getLength() == 0) { // No alpha - JpegFixer jpegFixer = new JpegFixer(); - ByteArrayOutputStream baos = new ByteArrayOutputStream(); - try { - jpegFixer.fixJpeg(new ByteArrayInputStream(imageData.getArray(), imageData.getPos(), imageData.getLength()), baos); - } catch (IOException ex) { - Logger.getLogger(DefineBitsJPEG4Tag.class.getName()).log(Level.SEVERE, null, ex); - } - return new ByteArrayInputStream(baos.toByteArray()); + JpegFixer jpegFixer = new JpegFixer(); + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + try { + jpegFixer.fixJpeg(new ByteArrayInputStream(imageData.getArray(), imageData.getPos(), imageData.getLength()), baos); + } catch (IOException ex) { + Logger.getLogger(DefineBitsJPEG4Tag.class.getName()).log(Level.SEVERE, null, ex); } + return new ByteArrayInputStream(baos.toByteArray()); + //} - return null; + //return null; } @Override @@ -259,7 +259,7 @@ public class DefineBitsJPEG4Tag extends ImageTag implements AloneTag, HasSeparat } catch (IOException ex) { Logger.getLogger(DefineBitsJPEG4Tag.class.getName()).log(Level.SEVERE, "Failed to get image", ex); } - + SerializableImage img = new SerializableImage(1, 1, BufferedImage.TYPE_INT_ARGB_PRE); Graphics g = img.getGraphics(); g.setColor(SWF.ERROR_COLOR);