From 23bb021ae034d03d599c01712e32697aee2ab1f0 Mon Sep 17 00:00:00 2001 From: Leonard Kupper <leonard.kupper@mailbox.tu-dresden.de> Date: Fri, 26 Jul 2019 12:18:16 +0200 Subject: [PATCH] Extended loggin for canvas and rectangle --- .../java/de/tudresden/inf/mci/brailleplot/App.java | 12 ++++++++++++ .../mci/brailleplot/rendering/AbstractCanvas.java | 1 + .../brailleplot/rendering/FunctionalRasterizer.java | 2 +- .../rendering/FunctionalRenderingBase.java | 2 +- .../mci/brailleplot/rendering/ImageRasterizer.java | 11 ++++++++--- .../inf/mci/brailleplot/rendering/Rectangle.java | 7 +++++++ 6 files changed, 30 insertions(+), 5 deletions(-) diff --git a/src/main/java/de/tudresden/inf/mci/brailleplot/App.java b/src/main/java/de/tudresden/inf/mci/brailleplot/App.java index cf1adf5a..cf6c170b 100644 --- a/src/main/java/de/tudresden/inf/mci/brailleplot/App.java +++ b/src/main/java/de/tudresden/inf/mci/brailleplot/App.java @@ -8,7 +8,9 @@ import de.tudresden.inf.mci.brailleplot.commandline.SettingsWriter; import de.tudresden.inf.mci.brailleplot.configparser.ConfigurationParser; import de.tudresden.inf.mci.brailleplot.configparser.JavaPropertiesConfigurationParser; +import de.tudresden.inf.mci.brailleplot.rendering.FunctionalRasterizer; import de.tudresden.inf.mci.brailleplot.rendering.Image; +import de.tudresden.inf.mci.brailleplot.rendering.ImageRasterizer; import de.tudresden.inf.mci.brailleplot.rendering.MasterRenderer; import org.slf4j.Logger; @@ -146,6 +148,16 @@ public final class App { getClass().getClassLoader().getResource("config/default.properties").getFile() ); MasterRenderer renderer = new MasterRenderer(parser.getPrinter(), parser.getFormat("A4")); + + // Replace default Image rasterizer + renderer.getRenderingBase().registerRasterizer(new FunctionalRasterizer<>( + Image.class, + new ImageRasterizer( + false, false, false, + 25 + ) + )); + renderer.rasterize(new Image( new File(getClass().getClassLoader().getResource("examples/img/2_image_chart.png").toURI()) )); diff --git a/src/main/java/de/tudresden/inf/mci/brailleplot/rendering/AbstractCanvas.java b/src/main/java/de/tudresden/inf/mci/brailleplot/rendering/AbstractCanvas.java index fa580925..caff397c 100644 --- a/src/main/java/de/tudresden/inf/mci/brailleplot/rendering/AbstractCanvas.java +++ b/src/main/java/de/tudresden/inf/mci/brailleplot/rendering/AbstractCanvas.java @@ -51,6 +51,7 @@ public abstract class AbstractCanvas { mLogger.trace("Determined page box: {}", pageBox); // Create a margin box + mLogger.trace("Cropping edges by defined margins:"); int marginTop = mFormat.getProperty("margin.top").toInt(); int marginLeft = mFormat.getProperty("margin.left").toInt(); int marginBottom = mFormat.getProperty("margin.bottom").toInt(); diff --git a/src/main/java/de/tudresden/inf/mci/brailleplot/rendering/FunctionalRasterizer.java b/src/main/java/de/tudresden/inf/mci/brailleplot/rendering/FunctionalRasterizer.java index a045e46b..b7c6b877 100644 --- a/src/main/java/de/tudresden/inf/mci/brailleplot/rendering/FunctionalRasterizer.java +++ b/src/main/java/de/tudresden/inf/mci/brailleplot/rendering/FunctionalRasterizer.java @@ -26,7 +26,7 @@ public class FunctionalRasterizer<T extends Renderable> implements Rasterizer { public FunctionalRasterizer( final Class<T> supportedRenderableClass, final Rasterizer<T> rasterizer) { - mLogger.info("Creating new FunctionalRasterizer: Binding {} rasterizer {}.", + mLogger.info("Creating new FunctionalRasterizer: Binding rasterizer reference (renderable type {}): {}.", supportedRenderableClass.getSimpleName(), rasterizer); mSupportedRenderableClass = supportedRenderableClass; mRasterizingAlgorithm = rasterizer::rasterize; diff --git a/src/main/java/de/tudresden/inf/mci/brailleplot/rendering/FunctionalRenderingBase.java b/src/main/java/de/tudresden/inf/mci/brailleplot/rendering/FunctionalRenderingBase.java index c424df6c..0714dd13 100644 --- a/src/main/java/de/tudresden/inf/mci/brailleplot/rendering/FunctionalRenderingBase.java +++ b/src/main/java/de/tudresden/inf/mci/brailleplot/rendering/FunctionalRenderingBase.java @@ -66,7 +66,7 @@ public class FunctionalRenderingBase { mLogger.trace("Registering new rasterizer {} for type {}", rasterizer, rasterizer.getSupportedRenderableClass().getSimpleName()); if (mRasterizingAlgorithms.containsKey(rasterizer.getSupportedRenderableClass())) { - mLogger.trace("Already registered rasterizer {} will be overwritten!", + mLogger.warn("Already registered rasterizer {} will be overwritten!", mRasterizingAlgorithms.get(rasterizer.getSupportedRenderableClass())); } diff --git a/src/main/java/de/tudresden/inf/mci/brailleplot/rendering/ImageRasterizer.java b/src/main/java/de/tudresden/inf/mci/brailleplot/rendering/ImageRasterizer.java index 497a714e..224048a2 100644 --- a/src/main/java/de/tudresden/inf/mci/brailleplot/rendering/ImageRasterizer.java +++ b/src/main/java/de/tudresden/inf/mci/brailleplot/rendering/ImageRasterizer.java @@ -38,7 +38,7 @@ public class ImageRasterizer implements Rasterizer<Image> { */ public ImageRasterizer() { this(true, true, true, DEFAULT_THRESHOLD); - mLogger.trace("Created ImageRasterizer with default settings"); + mLogger.trace("ImageRasterizer has been setup with default settings"); } /** @@ -105,7 +105,7 @@ public class ImageRasterizer implements Rasterizer<Image> { private void linearMapping(final BufferedImage imgBuf, final RasterCanvas canvas) { - mLogger.trace("Apply linear mapping algorithm."); + mLogger.trace("Applying linear mapping algorithm."); // A canvas is basically a wrapper for multiple representations of printable data, each representing a page. // These representations can be acquired by either requesting the current page or creating a new page. @@ -143,6 +143,7 @@ public class ImageRasterizer implements Rasterizer<Image> { // This can lead to distortions because the original pixel raster is equidistant, but the output raster // does not have to be equidistant. + mLogger.trace("Scanning through image pixel values..."); // Scan through each pixel of the original image for (int x = 0; x < imgBuf.getWidth(); x++) { // Convert from original pixel x-position to braille dot x-position. @@ -158,16 +159,18 @@ public class ImageRasterizer implements Rasterizer<Image> { } } } + mLogger.trace("Done!"); } private void quantifiedPositionMapping(final BufferedImage imgBuf, final RasterCanvas canvas) { - mLogger.trace("Apply quantified position algorithm."); + mLogger.trace("Applying quantified position algorithm."); MatrixData<Boolean> data = canvas.getNewPage(); // Instead of using the dot rectangle a rectangle representing the target printing space in millimeters // is built from the canvas information. + mLogger.trace("Determining available area (in mm):"); Rectangle availableArea = new Rectangle(0, 0, canvas.getPrintableWidth(), canvas.getPrintableHeight()); // Calculate the ratios between original image and target printable area. (mm / pixel) @@ -190,6 +193,7 @@ public class ImageRasterizer implements Rasterizer<Image> { // In a second step, the calculated exact position is quantified to fit a dot position on the raster. // Distortions can still be introduced but are minimized. + mLogger.trace("Scanning through image pixel values..."); // Scan through all pixels of the original image for (int x = 0; x < imgBuf.getWidth(); x++) { // Convert from original pixel x-position to printed dot x-position in millimeters. @@ -208,6 +212,7 @@ public class ImageRasterizer implements Rasterizer<Image> { } } } + mLogger.trace("Done!"); } diff --git a/src/main/java/de/tudresden/inf/mci/brailleplot/rendering/Rectangle.java b/src/main/java/de/tudresden/inf/mci/brailleplot/rendering/Rectangle.java index c653368b..59b51ed6 100644 --- a/src/main/java/de/tudresden/inf/mci/brailleplot/rendering/Rectangle.java +++ b/src/main/java/de/tudresden/inf/mci/brailleplot/rendering/Rectangle.java @@ -113,6 +113,7 @@ public class Rectangle { * @throws OutOfSpaceException If the requested partition is greater than the underlying rectangle itself. */ public Rectangle fromTop(final double height) throws OutOfSpaceException { + mLogger.trace("Getting partition of height {} from top of {}", height, this); checkHeight(height); return new Rectangle(getX(), getY(), getWidth(), height); } @@ -124,6 +125,7 @@ public class Rectangle { * @throws OutOfSpaceException If the requested partition is greater than the underlying rectangle itself. */ public Rectangle fromLeft(final double width) throws OutOfSpaceException { + mLogger.trace("Getting partition of width {} from left side of {}", width, this); checkWidth(width); return new Rectangle(getX(), getY(), width, getHeight()); } @@ -135,6 +137,7 @@ public class Rectangle { * @throws OutOfSpaceException If the requested partition is greater than the underlying rectangle itself. */ public Rectangle fromBottom(final double height) throws OutOfSpaceException { + mLogger.trace("Getting partition of height {} from bottom of {}", height, this); checkHeight(height); double newY = (getY() + (getHeight() - height)); return new Rectangle(getX(), newY, getWidth(), height); @@ -147,6 +150,7 @@ public class Rectangle { * @throws OutOfSpaceException If the requested partition is greater than the underlying rectangle itself. */ public Rectangle fromRight(final double width) throws OutOfSpaceException { + mLogger.trace("Getting partition of width {} from right side of {}", width, this); checkWidth(width); double newX = (getX() + (getWidth() - width)); return new Rectangle(newX, getY(), width, getHeight()); @@ -262,6 +266,7 @@ public class Rectangle { * @return New rectangle with scaled position and size. */ public Rectangle scaledBy(final double xScale, final double yScale) { + mLogger.trace("Scaling rectangle {} by {}x{}", this, xScale, yScale); return new Rectangle(mX * xScale, mY * yScale, mW * xScale, mH * yScale); } @@ -271,6 +276,7 @@ public class Rectangle { * @return New rectangle representing the intersection. */ public Rectangle intersectedWith(final Rectangle otherRectangle) { + mLogger.trace("Intersecting rectangles: {} & {}", this, otherRectangle); double itsctX = max(getX(), otherRectangle.getX()); double itsctY = max(getY(), otherRectangle.getY()); double itsctB = min(getBottom(), otherRectangle.getBottom()); @@ -285,6 +291,7 @@ public class Rectangle { * @return A new rectangle representing a translated copy of this rectangle. */ public Rectangle translatedBy(final double alongX, final double alongY) { + mLogger.trace("Translating rectangle {} along {},{}", this, alongX, alongY); return new Rectangle(getX() + alongX, getY() + alongY, getWidth(), getHeight()); } -- GitLab