aboutsummaryrefslogtreecommitdiffstats
path: root/poi-scratchpad/src
diff options
context:
space:
mode:
authorAndreas Beeker <kiwiwings@apache.org>2021-10-13 20:39:01 +0000
committerAndreas Beeker <kiwiwings@apache.org>2021-10-13 20:39:01 +0000
commit6583f68d2fed5a083c68dd9ad8332665975517e4 (patch)
treeb2a36c9c9f61b4396e31ca36bce61a0bff074044 /poi-scratchpad/src
parentdefd26493f88bcb3276d0095be81ee74c527b443 (diff)
downloadpoi-6583f68d2fed5a083c68dd9ad8332665975517e4.tar.gz
poi-6583f68d2fed5a083c68dd9ad8332665975517e4.zip
#64716 - wmf display error
update heuristic to respect location of bounding box git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1894206 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'poi-scratchpad/src')
-rw-r--r--poi-scratchpad/src/main/java/org/apache/poi/hemf/usermodel/HemfPicture.java15
1 files changed, 11 insertions, 4 deletions
diff --git a/poi-scratchpad/src/main/java/org/apache/poi/hemf/usermodel/HemfPicture.java b/poi-scratchpad/src/main/java/org/apache/poi/hemf/usermodel/HemfPicture.java
index 1e81d1be84..cd5f61fdaf 100644
--- a/poi-scratchpad/src/main/java/org/apache/poi/hemf/usermodel/HemfPicture.java
+++ b/poi-scratchpad/src/main/java/org/apache/poi/hemf/usermodel/HemfPicture.java
@@ -27,6 +27,7 @@ import java.awt.Graphics2D;
import java.awt.Shape;
import java.awt.geom.AffineTransform;
import java.awt.geom.Dimension2D;
+import java.awt.geom.Point2D;
import java.awt.geom.Rectangle2D;
import java.io.InputStream;
import java.nio.charset.Charset;
@@ -36,6 +37,7 @@ import java.util.List;
import java.util.Map;
import java.util.Spliterator;
import java.util.function.Consumer;
+import java.util.function.Function;
import java.util.function.Supplier;
import java.util.stream.Stream;
@@ -230,9 +232,8 @@ public class HemfPicture implements Iterable<HemfRecord>, GenericRecord {
? winBounds
: emfBounds;
} else {
- double recHyp = dia(recBounds);
b = Stream.of(emfBounds, winBounds, viewBounds).
- min(comparingDouble(r -> abs(dia(r) - recHyp))).get();
+ min(comparingDouble(r -> diff(r, recBounds))).get();
}
ctx.translate(graphicsBounds.getCenterX(), graphicsBounds.getCenterY());
@@ -258,8 +259,14 @@ public class HemfPicture implements Iterable<HemfRecord>, GenericRecord {
}
}
- private static double dia(Rectangle2D bounds) {
- return Math.sqrt(bounds.getWidth()*bounds.getWidth() + bounds.getHeight()*bounds.getWidth());
+ private static double diff(Rectangle2D bounds, Rectangle2D target) {
+ double d = 0;
+ for (int i=0; i<4; i++) {
+ Function<Rectangle2D,Double> fx = (i < 2) ? Rectangle2D::getMinX : Rectangle2D::getMaxX;
+ Function<Rectangle2D,Double> fy = (i % 2 == 0) ? Rectangle2D::getMinY : Rectangle2D::getMaxY;
+ d += Point2D.distanceSq(fx.apply(bounds), fy.apply(bounds), fx.apply(target), fy.apply(target));
+ }
+ return d;
}
public Iterable<HwmfEmbedded> getEmbeddings() {