From 5affc79d2550840ccddacfb234e5e7adad12f4f6 Mon Sep 17 00:00:00 2001 From: Honfika Date: Thu, 27 Feb 2014 23:44:18 +0100 Subject: [PATCH] new search modes: first, last, smallest --- .../com/jpexs/decompiler/flash/SWFSearch.java | 17 +++++++++++++++++ .../com/jpexs/decompiler/flash/SearchMode.java | 2 +- .../console/CommandLineArgumentParser.java | 13 +++++++++++-- .../flash/exporters/BitmapExporter.java | 3 ++- 4 files changed, 31 insertions(+), 4 deletions(-) diff --git a/trunk/src/com/jpexs/decompiler/flash/SWFSearch.java b/trunk/src/com/jpexs/decompiler/flash/SWFSearch.java index 1435ae787..61337bd8b 100644 --- a/trunk/src/com/jpexs/decompiler/flash/SWFSearch.java +++ b/trunk/src/com/jpexs/decompiler/flash/SWFSearch.java @@ -75,6 +75,8 @@ public class SWFSearch { "CFX".getBytes()); //Compressed ScaleForm GFx int pos = 0; long biggestSize = 0; + long smallestSize = Long.MAX_VALUE; + addressLoop: for (Long addr : ret.keySet()) { setProgress(pos * 100 / ret.size()); pos++; @@ -100,6 +102,21 @@ public class SWFSearch { swfStreams.clear(); swfStreams.put(addr, is); } + break; + case SMALLEST: + if (limit < smallestSize) { + smallestSize = limit; + swfStreams.clear(); + swfStreams.put(addr, is); + } + break; + case FIRST: + swfStreams.put(addr, is); + break addressLoop; + case LAST: + swfStreams.clear(); + swfStreams.put(addr, is); + break; } } } catch (OutOfMemoryError ome) { diff --git a/trunk/src/com/jpexs/decompiler/flash/SearchMode.java b/trunk/src/com/jpexs/decompiler/flash/SearchMode.java index eb0351a4d..d1e98dbd0 100644 --- a/trunk/src/com/jpexs/decompiler/flash/SearchMode.java +++ b/trunk/src/com/jpexs/decompiler/flash/SearchMode.java @@ -22,5 +22,5 @@ package com.jpexs.decompiler.flash; */ public enum SearchMode { - ALL, BIGGEST + ALL, BIGGEST, SMALLEST, FIRST, LAST } diff --git a/trunk/src/com/jpexs/decompiler/flash/console/CommandLineArgumentParser.java b/trunk/src/com/jpexs/decompiler/flash/console/CommandLineArgumentParser.java index 5ee8d24e7..8c9e37e22 100644 --- a/trunk/src/com/jpexs/decompiler/flash/console/CommandLineArgumentParser.java +++ b/trunk/src/com/jpexs/decompiler/flash/console/CommandLineArgumentParser.java @@ -124,7 +124,7 @@ public class CommandLineArgumentParser { System.out.println(" ...Compress SWF and save it to "); System.out.println(" 8) -decompress "); System.out.println(" ...Decompress and save it to "); - System.out.println(" 9) -extract [-o |] [nocheck] [(all|biggest|first)]"); + System.out.println(" 9) -extract [-o |] [nocheck] [(all|biggest|smallest|first|last)]"); System.out.println(" ...Extracts SWF files from ZIP or other binary files"); System.out.println(" ...-o parameter should contain a file path when \"biggest\" or \"first\" parameter is specified"); System.out.println(" ...-o parameter should contain a folder path when no exctaction mode or \"all\" parameter is specified"); @@ -787,6 +787,15 @@ public class CommandLineArgumentParser { case "biggest": mode = SearchMode.BIGGEST; break; + case "smallest": + mode = SearchMode.SMALLEST; + break; + case "first": + mode = SearchMode.FIRST; + break; + case "last": + mode = SearchMode.LAST; + break; } } @@ -808,7 +817,7 @@ public class CommandLineArgumentParser { InputStream stream = streamEntry.getValue(); stream.reset(); String fileNameOut; - if (mode == SearchMode.BIGGEST) { + if (mode != SearchMode.ALL) { if (output == null) { fileNameOut = Path.getFileNameWithoutExtension(new File(fileName)) + ".swf"; } else { diff --git a/trunk/src/com/jpexs/decompiler/flash/exporters/BitmapExporter.java b/trunk/src/com/jpexs/decompiler/flash/exporters/BitmapExporter.java index 4cc3d34f0..39333841d 100644 --- a/trunk/src/com/jpexs/decompiler/flash/exporters/BitmapExporter.java +++ b/trunk/src/com/jpexs/decompiler/flash/exporters/BitmapExporter.java @@ -108,6 +108,7 @@ public class BitmapExporter extends ShapeExporterBase implements IShapeExporter graphics.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR); graphics.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY); graphics.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); + graphics.setComposite(AlphaComposite.Src); defaultStroke = graphics.getStroke(); super.export(); } @@ -118,6 +119,7 @@ public class BitmapExporter extends ShapeExporterBase implements IShapeExporter graphics.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR); graphics.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY); graphics.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); + graphics.setComposite(AlphaComposite.Src); AffineTransform at = transformation.toTransform(); at.preConcatenate(AffineTransform.getScaleInstance(1 / SWF.unitDivisor, 1 / SWF.unitDivisor)); unitDivisor = 1; @@ -377,7 +379,6 @@ public class BitmapExporter extends ShapeExporterBase implements IShapeExporter if (fillPaint != null) { if (fillPaint instanceof MultipleGradientPaint) { AffineTransform oldAf = graphics.getTransform(); - graphics.setComposite(AlphaComposite.Src); if (fillPathPaint != null) { graphics.setPaint(fillPathPaint); }