From eec8268eb94af8197a1ad628fda0ddfe9524d757 Mon Sep 17 00:00:00 2001 From: Harald Kuhr Date: Thu, 2 Jan 2020 15:26:48 +0100 Subject: [PATCH] #490: Adobe Path PoC --- .../imageio/path/AdobePathBuilder.java | 18 ++++++++++++++---- .../imageio/path/AdobePathReader.java | 16 +++++++++------- .../imageio/path/AdobePathSegment.java | 3 +-- .../imageio/path/AdobePathWriter.java | 2 +- 4 files changed, 25 insertions(+), 14 deletions(-) diff --git a/imageio/imageio-clippath/src/main/java/com/twelvemonkeys/imageio/path/AdobePathBuilder.java b/imageio/imageio-clippath/src/main/java/com/twelvemonkeys/imageio/path/AdobePathBuilder.java index 8bcaf44a..44213335 100755 --- a/imageio/imageio-clippath/src/main/java/com/twelvemonkeys/imageio/path/AdobePathBuilder.java +++ b/imageio/imageio-clippath/src/main/java/com/twelvemonkeys/imageio/path/AdobePathBuilder.java @@ -10,16 +10,26 @@ import java.io.IOException; * @deprecated Use {@link AdobePathReader} instead. This class will be removed in a future release. */ public final class AdobePathBuilder { + private final AdobePathReader delegate; - public AdobePathBuilder(final byte[] data) { - this.delegate = new AdobePathReader(data); - } - + /** + * @see AdobePathReader#AdobePathReader(DataInput) + */ public AdobePathBuilder(final DataInput data) { this.delegate = new AdobePathReader(data); } + /** + * @see AdobePathReader#AdobePathReader(byte[]) + */ + public AdobePathBuilder(final byte[] data) { + this.delegate = new AdobePathReader(data); + } + + /** + * @see AdobePathReader#path() + */ public Path2D path() throws IOException { return delegate.path(); } diff --git a/imageio/imageio-clippath/src/main/java/com/twelvemonkeys/imageio/path/AdobePathReader.java b/imageio/imageio-clippath/src/main/java/com/twelvemonkeys/imageio/path/AdobePathReader.java index 88a4b3f6..93472acd 100755 --- a/imageio/imageio-clippath/src/main/java/com/twelvemonkeys/imageio/path/AdobePathReader.java +++ b/imageio/imageio-clippath/src/main/java/com/twelvemonkeys/imageio/path/AdobePathReader.java @@ -57,8 +57,8 @@ public final class AdobePathReader { private final DataInput data; /** - * Creates a path builder that will read its data from a {@code DataInput}, such as an - * {@code ImageInputStream}. + * Creates a path reader that will read its data from a {@code DataInput}, + * such as an {@code ImageInputStream}. * The data length is assumed to be a multiple of 26. * * @param data the input to read data from. @@ -70,7 +70,7 @@ public final class AdobePathReader { } /** - * Creates a path builder that will read its data from a {@code byte} array. + * Creates a path reader that will read its data from a {@code byte} array. * The array length must be a multiple of 26, and greater than 0. * * @param data the array to read data from. @@ -84,14 +84,14 @@ public final class AdobePathReader { } /** - * Builds the path. + * Builds the path by reading from the supplied input. * * @return the path * @throws javax.imageio.IIOException if the input contains a bad path data. * @throws IOException if a general I/O exception occurs during reading. */ public Path2D path() throws IOException { - List> subPaths = new ArrayList>(); + List> subPaths = new ArrayList<>(); List currentPath = null; int currentPathLength = 0; @@ -110,7 +110,7 @@ public final class AdobePathReader { subPaths.add(currentPath); } - currentPath = new ArrayList(segment.length); + currentPath = new ArrayList<>(segment.length); currentPathLength = segment.length; } else if (segment.selector == AdobePathSegment.OPEN_SUBPATH_BEZIER_LINKED @@ -137,7 +137,7 @@ public final class AdobePathReader { subPaths.add(currentPath); } - // now we have collected the PathPoints now create a Shape. + // We have collected the Path points, now create a Shape return pathToShape(subPaths); } @@ -199,6 +199,8 @@ public final class AdobePathReader { break; } + default: + throw new AssertionError(); } } } diff --git a/imageio/imageio-clippath/src/main/java/com/twelvemonkeys/imageio/path/AdobePathSegment.java b/imageio/imageio-clippath/src/main/java/com/twelvemonkeys/imageio/path/AdobePathSegment.java index ff3765a3..dae391a9 100755 --- a/imageio/imageio-clippath/src/main/java/com/twelvemonkeys/imageio/path/AdobePathSegment.java +++ b/imageio/imageio-clippath/src/main/java/com/twelvemonkeys/imageio/path/AdobePathSegment.java @@ -86,7 +86,7 @@ final class AdobePathSegment { } AdobePathSegment(int fillRuleSelector) { - this(isTrue(fillRuleSelector == PATH_FILL_RULE_RECORD, fillRuleSelector, "Expected fill rule record (6): %s"), + this(isTrue(fillRuleSelector == PATH_FILL_RULE_RECORD || fillRuleSelector == INITIAL_FILL_RULE_RECORD, fillRuleSelector, "Expected fill rule record (6 or 8): %s"), 0, -1, -1, -1, -1, -1, -1); } @@ -190,7 +190,6 @@ final class AdobePathSegment { default: // fall-through } - return String.format("Pt(pre=(%.3f, %.3f), knot=(%.3f, %.3f), post=(%.3f, %.3f), selector=%s)", cppx, cppy, apx, apy, cplx, cply, SELECTOR_NAMES[selector]); } } diff --git a/imageio/imageio-clippath/src/main/java/com/twelvemonkeys/imageio/path/AdobePathWriter.java b/imageio/imageio-clippath/src/main/java/com/twelvemonkeys/imageio/path/AdobePathWriter.java index 0186ab0e..7ab95a95 100755 --- a/imageio/imageio-clippath/src/main/java/com/twelvemonkeys/imageio/path/AdobePathWriter.java +++ b/imageio/imageio-clippath/src/main/java/com/twelvemonkeys/imageio/path/AdobePathWriter.java @@ -91,7 +91,7 @@ public final class AdobePathWriter { if (initial.apx != prev.apx || initial.apy != prev.apy) { // TODO: Line back to initial if last anchor point does not equal initial anchor? // subpath.add(new AdobePathSegment(CLOSED_SUBPATH_BEZIER_LINKED, prev.cppy, prev.cppx, prev.apy, prev.apx, 0, 0)); - System.err.println("FOO!"); + throw new AssertionError("Not a closed path"); } subpath.set(0, new AdobePathSegment(CLOSED_SUBPATH_BEZIER_LINKED, prev.cppy, prev.cppx, initial.apy, initial.apx, initial.cply, initial.cplx));