From 83d880f29fda86016730a0aba75e431290d57cba Mon Sep 17 00:00:00 2001 From: Lennart Eichhorn <lennart@madmanfred.com> Date: Sun, 31 May 2020 18:20:27 +0200 Subject: [PATCH] Restructured code directories --- src/main/java/Interfaces/Visualizer.java | 2 +- .../{Visualization => MainClasses}/Cell.java | 2 +- .../java/MainClasses/GeneticAlgorithm.java | 16 +- .../JCodecPNGtoMP4.java | 2 +- src/main/java/MainClasses/Main.java | 5 - src/main/java/Visualization/VideoCreator.java | 195 ------------------ .../Visualizers/BestFoldingToConsole.java | 9 +- .../Visualizers/BestFoldingToImage.java | 5 +- .../Visualizers/BestFoldingsToVideo.java | 5 +- .../GenerationOverviewToConsole.java | 2 +- .../Visualizers/GenerationProgressToLog.java | 2 +- 11 files changed, 17 insertions(+), 228 deletions(-) rename src/main/java/{Visualization => MainClasses}/Cell.java (98%) rename src/main/java/{Visualization => MainClasses}/JCodecPNGtoMP4.java (99%) delete mode 100644 src/main/java/Visualization/VideoCreator.java rename src/main/java/{Visualization => }/Visualizers/BestFoldingToConsole.java (92%) rename src/main/java/{Visualization => }/Visualizers/BestFoldingToImage.java (98%) rename src/main/java/{Visualization => }/Visualizers/BestFoldingsToVideo.java (98%) rename src/main/java/{Visualization => }/Visualizers/GenerationOverviewToConsole.java (97%) rename src/main/java/{Visualization => }/Visualizers/GenerationProgressToLog.java (98%) diff --git a/src/main/java/Interfaces/Visualizer.java b/src/main/java/Interfaces/Visualizer.java index 1b6c646..a632178 100644 --- a/src/main/java/Interfaces/Visualizer.java +++ b/src/main/java/Interfaces/Visualizer.java @@ -4,7 +4,7 @@ import Enums.State; import MainClasses.Candidate; import MainClasses.GeneticAlgorithm; import MainClasses.Vertex; -import Visualization.Cell; +import MainClasses.Cell; import java.util.ArrayList; import java.util.List; diff --git a/src/main/java/Visualization/Cell.java b/src/main/java/MainClasses/Cell.java similarity index 98% rename from src/main/java/Visualization/Cell.java rename to src/main/java/MainClasses/Cell.java index c801e70..5dfd229 100644 --- a/src/main/java/Visualization/Cell.java +++ b/src/main/java/MainClasses/Cell.java @@ -1,4 +1,4 @@ -package Visualization; +package MainClasses; import Enums.State; diff --git a/src/main/java/MainClasses/GeneticAlgorithm.java b/src/main/java/MainClasses/GeneticAlgorithm.java index a38a01a..4ea194c 100644 --- a/src/main/java/MainClasses/GeneticAlgorithm.java +++ b/src/main/java/MainClasses/GeneticAlgorithm.java @@ -11,16 +11,12 @@ import Mutators.SinglePoint; import Selectors.FitnessProportional; import Selectors.OnlyBest; import Selectors.Tournament; -import Visualization.Visualizers.BestFoldingToConsole; -import Visualization.Visualizers.BestFoldingToImage; - -import Visualization.Visualizers.BestFoldingsToVideo; -import Visualization.Visualizers.GenerationOverviewToConsole; -import Visualization.Visualizers.GenerationProgressToLog; -import java.io.IOException; -import java.nio.file.Files; -import java.nio.file.Paths; -import java.nio.file.StandardOpenOption; +import Visualizers.BestFoldingToConsole; +import Visualizers.BestFoldingToImage; + +import Visualizers.BestFoldingsToVideo; +import Visualizers.GenerationOverviewToConsole; +import Visualizers.GenerationProgressToLog; import java.util.Random; public class GeneticAlgorithm { diff --git a/src/main/java/Visualization/JCodecPNGtoMP4.java b/src/main/java/MainClasses/JCodecPNGtoMP4.java similarity index 99% rename from src/main/java/Visualization/JCodecPNGtoMP4.java rename to src/main/java/MainClasses/JCodecPNGtoMP4.java index 0b730a2..f037c5c 100644 --- a/src/main/java/Visualization/JCodecPNGtoMP4.java +++ b/src/main/java/MainClasses/JCodecPNGtoMP4.java @@ -1,4 +1,4 @@ -package Visualization; +package MainClasses; /** * Using NIO e JCodec to convert multiple sequence png images to mp4 video file diff --git a/src/main/java/MainClasses/Main.java b/src/main/java/MainClasses/Main.java index ffa497e..1fd7b3b 100644 --- a/src/main/java/MainClasses/Main.java +++ b/src/main/java/MainClasses/Main.java @@ -1,10 +1,5 @@ package MainClasses; -import Enums.VisualizerMethods; -import Visualization.VideoCreator; - -import java.util.Arrays; - public class Main { public static void main(String[] args) { diff --git a/src/main/java/Visualization/VideoCreator.java b/src/main/java/Visualization/VideoCreator.java deleted file mode 100644 index 6f16ce4..0000000 --- a/src/main/java/Visualization/VideoCreator.java +++ /dev/null @@ -1,195 +0,0 @@ -package Visualization; - -import MainClasses.Config; - -import javax.imageio.ImageIO; -import java.awt.*; -import java.awt.image.BufferedImage; -import java.io.File; -import java.io.FilenameFilter; -import java.io.IOException; -import java.nio.file.DirectoryStream; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.Paths; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.List; - -public class VideoCreator{ - - private static final int MAXIMUM_SIZE = 3000; - public static File dir = new File("./visualization/series"); // Default - public static final String[] extensions = new String[]{"jpg", "png"}; - public static final FilenameFilter imageFilter = new FilenameFilter() { - @Override - public boolean accept(final File dir, String name) { - for (final String ext : extensions) { - if (name.endsWith("." + ext)) { - return (true); - } - } - return (false); - } - }; - - - // MainClasses.Main calls this - public static void createVideo(String imagesPath, String videoPathAndFile, - int imgFps, int imgToFpsIncrease, int maxFps, int maxH, int maxW, boolean zoom) { - try { - System.err.println("\nStarting image resizing"); - if (zoom) { - VideoCreator.resizeImagesWithZoom(imagesPath); - } else { - VideoCreator.resizeImages(imagesPath, maxH, maxW); - } - - File videoFile = new File(videoPathAndFile); - if (!videoFile.exists()) { - videoFile.createNewFile(); - } - - try { - JCodecPNGtoMP4.generateVideoBySequenceImages(videoFile, imagesPath, "png", imgFps, imgToFpsIncrease, maxFps); - } catch (Exception e) { - e.printStackTrace(); - } - } catch (IOException e) { - e.printStackTrace(); - } - } - - private static void resizeImages(String imagesPath, int maxH, int maxW) throws IOException { - dir = new File(imagesPath); - - if (dir.isDirectory()) { - // reads input images and determines maximum required size - int maxHeight = maxH; - int maxWidth = maxW; - - if (maxHeight <= 0 || maxWidth <= 0) { - int counter = 1; - for (final File f : dir.listFiles(imageFilter)) { - BufferedImage inputImage = ImageIO.read(f); - if (maxHeight < inputImage.getHeight()) { - maxHeight = inputImage.getHeight(); - } - if (maxWidth < inputImage.getWidth()) { - maxWidth = inputImage.getWidth(); - } - } - } - - // Needed because video is not playable with bigger sizes, mostly a concern for straight line initialization - if (maxWidth > MAXIMUM_SIZE) { - maxWidth = MAXIMUM_SIZE; - } - if (maxHeight > MAXIMUM_SIZE) { - maxHeight = MAXIMUM_SIZE; - } - - // Resizes all images - for (final File f : dir.listFiles(imageFilter)) { - BufferedImage inputImage = ImageIO.read(f); - - // creates output image - BufferedImage outputImage = new BufferedImage(maxWidth, - maxHeight, inputImage.getType()); - - // draws input image to the top left corner - Graphics2D g2d = outputImage.createGraphics(); - //TODO The following two lines should be unnecessary - //g2d.setColor(Config.imageBackground); - //g2d.fillRect(0,0, maxWidth, maxHeight); - g2d.drawImage(inputImage, 0, 0, inputImage.getWidth(), inputImage.getHeight(), null); - g2d.dispose(); - - // overwrites image - ImageIO.write(outputImage, "png", f); - } - } - } - - private static void resizeImagesWithZoom(String imagesPath) throws IOException { - dir = new File(imagesPath); - - int[] maxHeightAfterIndex = new int[dir.listFiles(imageFilter).length]; - int[] maxWidthAfterIndex = new int[dir.listFiles(imageFilter).length]; - - if (dir.isDirectory()) { - - Path directoryPath = Paths.get(new File(imagesPath).toURI()); - DirectoryStream<Path> stream = Files.newDirectoryStream(directoryPath, "*.png"); - - List<File> filesList = new ArrayList<>(); - for (Path path : stream) { - filesList.add(path.toFile()); - } - File[] files = new File[filesList.size()]; - filesList.toArray(files); - - JCodecPNGtoMP4.sortByNumber(files); - List<Object> list = Arrays.asList(files); - Collections.reverse(list); - list.toArray(files); - - // reads input images and determines maximum required size after that particular image - int currentMaxHeight = 0; - int currentMaxWidth = 0; - int counter = files.length - 1; - for (File f : files) { - BufferedImage inputImage = ImageIO.read(f); - if (currentMaxHeight < inputImage.getHeight()) { - currentMaxHeight = inputImage.getHeight(); - } - if (currentMaxWidth < inputImage.getWidth()) { - currentMaxWidth = inputImage.getWidth(); - } - maxHeightAfterIndex[counter] = currentMaxHeight; - maxWidthAfterIndex[counter] = currentMaxWidth; - counter--; - } - - // Resizes all images - counter = files.length - 1; - for (final File f : files) { - BufferedImage inputImage = ImageIO.read(f); - - // creates output image - BufferedImage outputImage = new BufferedImage(maxWidthAfterIndex[0], // Total maximum W/H - maxHeightAfterIndex[0], inputImage.getType()); - - // draws input image to the top left corner - Graphics2D g2d = outputImage.createGraphics(); - //TODO The following two lines should be unnecessary - //g2d.setColor(Config.imageBackground); - //g2d.fillRect(0,0, maxWidthAfterIndex[0], maxHeightAfterIndex[0]); - - int newHeight = 0; - int newWidth = 0; - - // Width expansion to border if height fits accordingly - double expansionByWidth = (double) maxWidthAfterIndex[0] / maxWidthAfterIndex[counter]; - if (maxHeightAfterIndex[counter] * expansionByWidth <= maxHeightAfterIndex[0]) { - newWidth = (int) Math.floor(inputImage.getWidth() * expansionByWidth); - newHeight = (int) Math.floor(inputImage.getHeight() * expansionByWidth); - } else { - // otherwise height expansion to border and width according to ratio - double expansionByHeight = (double) maxHeightAfterIndex[0] / maxHeightAfterIndex[counter]; - newWidth = (int) Math.floor(inputImage.getWidth() * expansionByHeight); - newHeight = (int) Math.floor(inputImage.getHeight() * expansionByHeight); - } - - g2d.drawImage(inputImage, 0, 0, newWidth, newHeight, null); - g2d.dispose(); - - // overwrites image - ImageIO.write(outputImage, "png", f); - - counter--; - } - } - } -} \ No newline at end of file diff --git a/src/main/java/Visualization/Visualizers/BestFoldingToConsole.java b/src/main/java/Visualizers/BestFoldingToConsole.java similarity index 92% rename from src/main/java/Visualization/Visualizers/BestFoldingToConsole.java rename to src/main/java/Visualizers/BestFoldingToConsole.java index d5eb289..d7ebd39 100644 --- a/src/main/java/Visualization/Visualizers/BestFoldingToConsole.java +++ b/src/main/java/Visualizers/BestFoldingToConsole.java @@ -1,4 +1,4 @@ -package Visualization.Visualizers; +package Visualizers; import Enums.State; import Interfaces.Visualizer; @@ -6,13 +6,8 @@ import MainClasses.Candidate; import MainClasses.Config; import MainClasses.GeneticAlgorithm; import MainClasses.Vertex; -import Visualization.Cell; +import MainClasses.Cell; -import javax.imageio.ImageIO; -import java.awt.*; -import java.awt.image.BufferedImage; -import java.io.File; -import java.io.IOException; import java.util.ArrayList; public class BestFoldingToConsole implements Visualizer { diff --git a/src/main/java/Visualization/Visualizers/BestFoldingToImage.java b/src/main/java/Visualizers/BestFoldingToImage.java similarity index 98% rename from src/main/java/Visualization/Visualizers/BestFoldingToImage.java rename to src/main/java/Visualizers/BestFoldingToImage.java index 32d4c55..00d1830 100644 --- a/src/main/java/Visualization/Visualizers/BestFoldingToImage.java +++ b/src/main/java/Visualizers/BestFoldingToImage.java @@ -1,14 +1,13 @@ -package Visualization.Visualizers; +package Visualizers; import Enums.State; import Evaluators.EvaluatorNESW; -import Interfaces.Evaluator; import Interfaces.Visualizer; import MainClasses.Candidate; import MainClasses.Config; import MainClasses.GeneticAlgorithm; import MainClasses.Vertex; -import Visualization.Cell; +import MainClasses.Cell; import java.nio.file.Files; import java.nio.file.Paths; diff --git a/src/main/java/Visualization/Visualizers/BestFoldingsToVideo.java b/src/main/java/Visualizers/BestFoldingsToVideo.java similarity index 98% rename from src/main/java/Visualization/Visualizers/BestFoldingsToVideo.java rename to src/main/java/Visualizers/BestFoldingsToVideo.java index b94324f..9fd7cd8 100644 --- a/src/main/java/Visualization/Visualizers/BestFoldingsToVideo.java +++ b/src/main/java/Visualizers/BestFoldingsToVideo.java @@ -1,11 +1,10 @@ -package Visualization.Visualizers; +package Visualizers; import Interfaces.Visualizer; import MainClasses.Candidate; import MainClasses.Config; import MainClasses.GeneticAlgorithm; -import Visualization.JCodecPNGtoMP4; -import Visualization.VideoCreator; +import MainClasses.JCodecPNGtoMP4; import java.awt.Graphics2D; import java.awt.image.BufferedImage; import java.io.File; diff --git a/src/main/java/Visualization/Visualizers/GenerationOverviewToConsole.java b/src/main/java/Visualizers/GenerationOverviewToConsole.java similarity index 97% rename from src/main/java/Visualization/Visualizers/GenerationOverviewToConsole.java rename to src/main/java/Visualizers/GenerationOverviewToConsole.java index c6a2195..9ee0780 100644 --- a/src/main/java/Visualization/Visualizers/GenerationOverviewToConsole.java +++ b/src/main/java/Visualizers/GenerationOverviewToConsole.java @@ -1,4 +1,4 @@ -package Visualization.Visualizers; +package Visualizers; import Evaluators.EvaluatorNESW; import Interfaces.Visualizer; diff --git a/src/main/java/Visualization/Visualizers/GenerationProgressToLog.java b/src/main/java/Visualizers/GenerationProgressToLog.java similarity index 98% rename from src/main/java/Visualization/Visualizers/GenerationProgressToLog.java rename to src/main/java/Visualizers/GenerationProgressToLog.java index 8feb053..47131d6 100644 --- a/src/main/java/Visualization/Visualizers/GenerationProgressToLog.java +++ b/src/main/java/Visualizers/GenerationProgressToLog.java @@ -1,4 +1,4 @@ -package Visualization.Visualizers; +package Visualizers; import Evaluators.EvaluatorNESW; import Interfaces.Visualizer; -- GitLab