Return-Path: X-Original-To: apmail-poi-commits-archive@minotaur.apache.org Delivered-To: apmail-poi-commits-archive@minotaur.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 5AB2F9345 for ; Sat, 25 Feb 2012 09:40:41 +0000 (UTC) Received: (qmail 59386 invoked by uid 500); 25 Feb 2012 09:40:41 -0000 Delivered-To: apmail-poi-commits-archive@poi.apache.org Received: (qmail 59347 invoked by uid 500); 25 Feb 2012 09:40:41 -0000 Mailing-List: contact commits-help@poi.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@poi.apache.org Delivered-To: mailing list commits@poi.apache.org Received: (qmail 59340 invoked by uid 99); 25 Feb 2012 09:40:40 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Sat, 25 Feb 2012 09:40:40 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=5.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Sat, 25 Feb 2012 09:40:37 +0000 Received: from eris.apache.org (localhost [127.0.0.1]) by eris.apache.org (Postfix) with ESMTP id 0CD6223888CD for ; Sat, 25 Feb 2012 09:40:17 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r1293561 - in /poi/trunk/src: documentation/content/xdocs/status.xml scratchpad/src/org/apache/poi/hslf/blip/BitmapPainter.java scratchpad/src/org/apache/poi/hslf/model/SimpleShape.java Date: Sat, 25 Feb 2012 09:40:16 -0000 To: commits@poi.apache.org From: yegor@apache.org X-Mailer: svnmailer-1.0.8-patched Message-Id: <20120225094017.0CD6223888CD@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: yegor Date: Sat Feb 25 09:40:16 2012 New Revision: 1293561 URL: http://svn.apache.org/viewvc?rev=1293561&view=rev Log: Bugzilla 52078 - avoid OutOfMemoryError when rendering groupped pictures in HSLF Modified: poi/trunk/src/documentation/content/xdocs/status.xml poi/trunk/src/scratchpad/src/org/apache/poi/hslf/blip/BitmapPainter.java poi/trunk/src/scratchpad/src/org/apache/poi/hslf/model/SimpleShape.java Modified: poi/trunk/src/documentation/content/xdocs/status.xml URL: http://svn.apache.org/viewvc/poi/trunk/src/documentation/content/xdocs/status.xml?rev=1293561&r1=1293560&r2=1293561&view=diff ============================================================================== --- poi/trunk/src/documentation/content/xdocs/status.xml (original) +++ poi/trunk/src/documentation/content/xdocs/status.xml Sat Feb 25 09:40:16 2012 @@ -34,6 +34,7 @@ + 52078 - avoid OutOfMemoryError when rendering groupped pictures in HSLF 52745 - fixed XSSFRichtextString.append to preserve leading / trailing spaces 52716 - tolerate hyperlinks that have neither location nor relation 52599 - avoid duplicate text when rendering slides in HSLF Modified: poi/trunk/src/scratchpad/src/org/apache/poi/hslf/blip/BitmapPainter.java URL: http://svn.apache.org/viewvc/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/blip/BitmapPainter.java?rev=1293561&r1=1293560&r2=1293561&view=diff ============================================================================== --- poi/trunk/src/scratchpad/src/org/apache/poi/hslf/blip/BitmapPainter.java (original) +++ poi/trunk/src/scratchpad/src/org/apache/poi/hslf/blip/BitmapPainter.java Sat Feb 25 09:40:16 2012 @@ -40,6 +40,8 @@ import org.apache.poi.util.POILogFactory ==================================================================== */ import javax.imageio.ImageIO; import java.awt.*; +import java.awt.geom.AffineTransform; +import java.awt.geom.Rectangle2D; import java.awt.image.BufferedImage; import java.io.ByteArrayInputStream; @@ -60,9 +62,9 @@ public final class BitmapPainter impleme logger.log(POILogger.WARN, "ImageIO failed to create image. image.type: " + pict.getType()); return; } - Rectangle anchor = parent.getAnchor(); - Image scaledImg = img.getScaledInstance(anchor.width, anchor.height, Image.SCALE_SMOOTH); - graphics.drawImage(scaledImg, anchor.x, anchor.y, null); + + Rectangle anchor = parent.getLogicalAnchor2D().getBounds(); + graphics.drawImage(img, anchor.x, anchor.y, anchor.width, anchor.height, null); } } Modified: poi/trunk/src/scratchpad/src/org/apache/poi/hslf/model/SimpleShape.java URL: http://svn.apache.org/viewvc/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/model/SimpleShape.java?rev=1293561&r1=1293560&r2=1293561&view=diff ============================================================================== --- poi/trunk/src/scratchpad/src/org/apache/poi/hslf/model/SimpleShape.java (original) +++ poi/trunk/src/scratchpad/src/org/apache/poi/hslf/model/SimpleShape.java Sat Feb 25 09:40:16 2012 @@ -22,6 +22,8 @@ import java.awt.Graphics2D; import java.awt.geom.AffineTransform; import java.awt.geom.Rectangle2D; import java.io.ByteArrayOutputStream; +import java.util.ArrayList; +import java.util.List; import org.apache.poi.ddf.*; import org.apache.poi.ddf.EscherSpRecord; @@ -246,27 +248,37 @@ public abstract class SimpleShape extend setEscherProperty(EscherProperties.TRANSFORM__ROTATION, (theta << 16)); } + /** + * + * @return 'absolute' anchor of this shape relative to the parent sheet + */ public Rectangle2D getLogicalAnchor2D(){ Rectangle2D anchor = getAnchor2D(); //if it is a groupped shape see if we need to transform the coordinates if (_parent != null){ + List lst = new ArrayList(); + lst.add(_parent); Shape top = _parent; - while(top.getParent() != null) top = top.getParent(); - - Rectangle2D clientAnchor = top.getAnchor2D(); - Rectangle2D spgrAnchor = ((ShapeGroup)top).getCoordinates(); - - double scalex = spgrAnchor.getWidth()/clientAnchor.getWidth(); - double scaley = spgrAnchor.getHeight()/clientAnchor.getHeight(); - - double x = clientAnchor.getX() + (anchor.getX() - spgrAnchor.getX())/scalex; - double y = clientAnchor.getY() + (anchor.getY() - spgrAnchor.getY())/scaley; - double width = anchor.getWidth()/scalex; - double height = anchor.getHeight()/scaley; - - anchor = new Rectangle2D.Double(x, y, width, height); + while(top.getParent() != null) { + top = top.getParent(); + lst.add(top); + } + AffineTransform tx = new AffineTransform(); + for(int i = lst.size() - 1; i >= 0; i--) { + ShapeGroup prnt = (ShapeGroup)lst.get(i); + Rectangle2D exterior = prnt.getAnchor2D(); + Rectangle2D interior = prnt.getCoordinates(); + + double scaleX = exterior.getWidth() / interior.getWidth(); + double scaleY = exterior.getHeight() / interior.getHeight(); + + tx.translate(exterior.getX(), exterior.getY()); + tx.scale(scaleX, scaleY); + tx.translate(-interior.getX(), -interior.getY()); + } + anchor = tx.createTransformedShape(anchor).getBounds2D(); } int angle = getRotation(); --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscribe@poi.apache.org For additional commands, e-mail: commits-help@poi.apache.org