diff --git a/src/main/java/Interfaces/Visualizer.java b/src/main/java/Interfaces/Visualizer.java index 1b6c6469d26ab638e7da50c435a5c72dc67587c4..a6321784c53e8b5af6193c12de551f2c48b17109 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 c801e7051ea5865bd9be72ac658db473c2d883ae..5dfd229e44a63643c6acd2114da50561812fe962 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 a38a01a9a2bb94e233cacb9e2e63aff5d1b1ecf0..4ea194cc313d044e216d781f0c3cafc656974575 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 0b730a24c39c0e56e54db63a3c94a0a816aeb0b0..f037c5c8b67ba821158b697f466263a0c087ad64 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 ffa497e0d42fc1d0b350ddc4765b45a3e1ac1e47..1fd7b3b0500764d600b4762313cc68ca1511442d 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 6f16ce4eb2ea6ac4b4aaea90453001a4385f3a20..0000000000000000000000000000000000000000 --- 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 d5eb289c7f405d65e4fc5d0eedd982418ab32509..d7ebd39bbf517d83806d2100a87261b1dd208325 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 32d4c55a9306a1087af48182dbdda589b5790c98..00d1830228e3b680c50d028363e56fc3d6b9e859 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 b94324fea7b7112fd03f19df8a9b316be649d016..9fd7cd8179a233b23a16ae866dd32ea42edade39 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 c6a2195041f5e669b4c9dda16ec9abf159ad8bb3..9ee07807d0911126f4c0fbbed15567df7bdf5456 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 8feb05324f72f3212c68d9f4f0901c2ff7dfe760..47131d6fee8031aebfedb9b647f459f30f2ba3b2 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;