You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@poi.apache.org by ki...@apache.org on 2016/05/16 10:09:22 UTC

svn commit: r1744007 - in /poi/trunk/src: java/org/apache/poi/sl/draw/ ooxml/java/org/apache/poi/xslf/util/ scratchpad/src/org/apache/poi/hwmf/draw/

Author: kiwiwings
Date: Mon May 16 10:09:22 2016
New Revision: 1744007

URL: http://svn.apache.org/viewvc?rev=1744007&view=rev
Log:
Close resources in Common SL rendering classes and minimize memory consumption by using the image anchor dimensions instead of the WMF-included dimensions

Modified:
    poi/trunk/src/java/org/apache/poi/sl/draw/BitmapImageRenderer.java
    poi/trunk/src/java/org/apache/poi/sl/draw/DrawPaint.java
    poi/trunk/src/java/org/apache/poi/sl/draw/DrawSimpleShape.java
    poi/trunk/src/java/org/apache/poi/sl/draw/ImageRenderer.java
    poi/trunk/src/ooxml/java/org/apache/poi/xslf/util/PPTX2PNG.java
    poi/trunk/src/scratchpad/src/org/apache/poi/hwmf/draw/HwmfSLImageRenderer.java

Modified: poi/trunk/src/java/org/apache/poi/sl/draw/BitmapImageRenderer.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/sl/draw/BitmapImageRenderer.java?rev=1744007&r1=1744006&r2=1744007&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/sl/draw/BitmapImageRenderer.java (original)
+++ poi/trunk/src/java/org/apache/poi/sl/draw/BitmapImageRenderer.java Mon May 16 10:09:22 2016
@@ -24,6 +24,7 @@ import java.awt.Insets;
 import java.awt.Shape;
 import java.awt.geom.AffineTransform;
 import java.awt.geom.Rectangle2D;
+import java.awt.image.AffineTransformOp;
 import java.awt.image.BufferedImage;
 import java.awt.image.RescaleOp;
 import java.io.ByteArrayInputStream;
@@ -69,15 +70,26 @@ public class BitmapImageRenderer impleme
         return bi;
     }
 
-
-    /**
-     * @return the buffered image
-     */
+    @Override
     public BufferedImage getImage() {
         return img;
     }
 
     @Override
+    public BufferedImage getImage(Dimension dim) {
+        double w_old = img.getWidth();
+        double h_old = img.getHeight();
+        BufferedImage scaled = new BufferedImage((int)w_old, (int)h_old, BufferedImage.TYPE_INT_ARGB);
+        double w_new = dim.getWidth();
+        double h_new = dim.getHeight();
+        AffineTransform at = new AffineTransform();
+        at.scale(w_new/w_old, h_new/h_old);
+        AffineTransformOp scaleOp = new AffineTransformOp(at, AffineTransformOp.TYPE_BILINEAR);
+        scaleOp.filter(img, scaled);
+        return scaled;
+    }
+
+    @Override
     public Dimension getDimension() {
         return (img == null)
             ? new Dimension(0,0)

Modified: poi/trunk/src/java/org/apache/poi/sl/draw/DrawPaint.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/sl/draw/DrawPaint.java?rev=1744007&r1=1744006&r2=1744007&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/sl/draw/DrawPaint.java (original)
+++ poi/trunk/src/java/org/apache/poi/sl/draw/DrawPaint.java Mon May 16 10:09:22 2016
@@ -18,6 +18,7 @@
 package org.apache.poi.sl.draw;
 
 import java.awt.Color;
+import java.awt.Dimension;
 import java.awt.Graphics2D;
 import java.awt.LinearGradientPaint;
 import java.awt.MultipleGradientPaint.ColorSpaceType;
@@ -153,12 +154,20 @@ public class DrawPaint {
             renderer.setAlpha(alpha/100000.f);
         }
         
-        BufferedImage image = renderer.getImage();
+        Rectangle2D textAnchor = shape.getAnchor();
+        BufferedImage image;
+        if ("image/x-wmf".equals(fill.getContentType())) {
+            // don't rely on wmf dimensions, use dimension of anchor
+            // TODO: check pixels vs. points for image dimension 
+            image = renderer.getImage(new Dimension((int)textAnchor.getWidth(), (int)textAnchor.getHeight()));
+        } else {
+            image = renderer.getImage();
+        }
+
         if(image == null) {
             LOG.log(POILogger.ERROR, "Can't load image data");
             return null;
         }
-        Rectangle2D textAnchor = shape.getAnchor();
         Paint paint = new java.awt.TexturePaint(image, textAnchor);
 
         return paint;

Modified: poi/trunk/src/java/org/apache/poi/sl/draw/DrawSimpleShape.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/sl/draw/DrawSimpleShape.java?rev=1744007&r1=1744006&r2=1744007&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/sl/draw/DrawSimpleShape.java (original)
+++ poi/trunk/src/java/org/apache/poi/sl/draw/DrawSimpleShape.java Mon May 16 10:09:22 2016
@@ -408,6 +408,9 @@ public class DrawSimpleShape extends Dra
 
                     presets.put(cusName, new CustomGeometry(cusGeom));
                 }
+                
+                staxFiltRd.close();
+                staxReader.close();
             } catch (Exception e) {
                 throw new RuntimeException("Unable to load preset geometries.", e);
             } finally {

Modified: poi/trunk/src/java/org/apache/poi/sl/draw/ImageRenderer.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/sl/draw/ImageRenderer.java?rev=1744007&r1=1744006&r2=1744007&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/sl/draw/ImageRenderer.java (original)
+++ poi/trunk/src/java/org/apache/poi/sl/draw/ImageRenderer.java Mon May 16 10:09:22 2016
@@ -18,17 +18,13 @@
  */
 package org.apache.poi.sl.draw;
 
-import java.awt.*;
-import java.awt.geom.AffineTransform;
+import java.awt.Dimension;
+import java.awt.Graphics2D;
+import java.awt.Insets;
 import java.awt.geom.Rectangle2D;
 import java.awt.image.BufferedImage;
-import java.awt.image.RescaleOp;
-import java.io.*;
-
-import javax.imageio.ImageIO;
-
-import org.apache.poi.util.POILogFactory;
-import org.apache.poi.util.POILogger;
+import java.io.IOException;
+import java.io.InputStream;
 
 /**
  * Classes can implement this interfaces to support other formats, for
@@ -109,6 +105,14 @@ public interface ImageRenderer {
      * @return the image as buffered image
      */
     BufferedImage getImage();
+
+    /**
+     * @param dim the dimension in pixels of the returned image
+     * @return the image as buffered image
+     * 
+     * @since POI 3.15-beta2
+     */
+    BufferedImage getImage(Dimension dim);
     
     /**
      * Render picture data into the supplied graphics

Modified: poi/trunk/src/ooxml/java/org/apache/poi/xslf/util/PPTX2PNG.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/java/org/apache/poi/xslf/util/PPTX2PNG.java?rev=1744007&r1=1744006&r2=1744007&view=diff
==============================================================================
--- poi/trunk/src/ooxml/java/org/apache/poi/xslf/util/PPTX2PNG.java (original)
+++ poi/trunk/src/ooxml/java/org/apache/poi/xslf/util/PPTX2PNG.java Mon May 16 10:09:22 2016
@@ -160,6 +160,9 @@ public class PPTX2PNG {
                     File outfile = new File(outdir, outname);
                     ImageIO.write(img, format, outfile);
                 }
+                
+                graphics.dispose();
+                img.flush();
             }
         } finally {
             ss.close();

Modified: poi/trunk/src/scratchpad/src/org/apache/poi/hwmf/draw/HwmfSLImageRenderer.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/scratchpad/src/org/apache/poi/hwmf/draw/HwmfSLImageRenderer.java?rev=1744007&r1=1744006&r2=1744007&view=diff
==============================================================================
--- poi/trunk/src/scratchpad/src/org/apache/poi/hwmf/draw/HwmfSLImageRenderer.java (original)
+++ poi/trunk/src/scratchpad/src/org/apache/poi/hwmf/draw/HwmfSLImageRenderer.java Mon May 16 10:09:22 2016
@@ -72,18 +72,22 @@ public class HwmfSLImageRenderer impleme
 
     @Override
     public BufferedImage getImage() {
+        return getImage(getDimension());
+    }
+
+    @Override
+    public BufferedImage getImage(Dimension dim) {
         if (image == null) {
             return new BufferedImage(1, 1, BufferedImage.TYPE_INT_ARGB); 
         }
         
-        Dimension dim = getDimension();
         BufferedImage bufImg = new BufferedImage((int)dim.getWidth(), (int)dim.getHeight(), BufferedImage.TYPE_INT_ARGB);
         Graphics2D g = bufImg.createGraphics();
         g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
         g.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
         g.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BICUBIC);
         g.setRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS, RenderingHints.VALUE_FRACTIONALMETRICS_ON);
-        image.draw(g);
+        image.draw(g, new Rectangle2D.Double(0,0,dim.getWidth(),dim.getHeight()));
         g.dispose();
         
         if (alpha != 0) {
@@ -97,7 +101,7 @@ public class HwmfSLImageRenderer impleme
         
         return bufImg;
     }
-
+    
     @Override
     public boolean drawImage(Graphics2D graphics, Rectangle2D anchor) {
         return drawImage(graphics, anchor, null);



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@poi.apache.org
For additional commands, e-mail: commits-help@poi.apache.org