]> source.dussan.org Git - poi.git/commitdiff
Refactor alpha handling
authorAndreas Beeker <kiwiwings@apache.org>
Mon, 22 Jul 2019 21:30:12 +0000 (21:30 +0000)
committerAndreas Beeker <kiwiwings@apache.org>
Mon, 22 Jul 2019 21:30:12 +0000 (21:30 +0000)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1863601 13f79535-47bb-0310-9956-ffa450edef68

src/java/org/apache/poi/sl/draw/BitmapImageRenderer.java
src/scratchpad/src/org/apache/poi/hemf/draw/HemfImageRenderer.java
src/scratchpad/src/org/apache/poi/hwmf/draw/HwmfImageRenderer.java

index 3643b976c09115cda6b5f267d6fd1c4c70714332..e6a28a3c23509de0b0c3697e2e0defff7b028c01 100644 (file)
@@ -244,9 +244,9 @@ public class BitmapImageRenderer implements ImageRenderer {
         }
         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();
+        BufferedImage scaled = new BufferedImage((int)w_new, (int)h_new, BufferedImage.TYPE_INT_ARGB);
         AffineTransform at = new AffineTransform();
         at.scale(w_new/w_old, h_new/h_old);
         AffineTransformOp scaleOp = new AffineTransformOp(at, AffineTransformOp.TYPE_BILINEAR);
@@ -263,16 +263,22 @@ public class BitmapImageRenderer implements ImageRenderer {
 
     @Override
     public void setAlpha(double alpha) {
-        if (img == null) return;
+        img = setAlpha(img, alpha);
+    }
+
+    public static BufferedImage setAlpha(BufferedImage image, double alpha) {
+        if (image == null) {
+            return new BufferedImage(1, 1, BufferedImage.TYPE_INT_ARGB);
+        }
 
-        Dimension dim = getDimension();
-        BufferedImage newImg = new BufferedImage((int)dim.getWidth(), (int)dim.getHeight(), BufferedImage.TYPE_INT_ARGB);
-        Graphics2D g = newImg.createGraphics();
-        RescaleOp op = new RescaleOp(new float[]{1.0f, 1.0f, 1.0f, (float)alpha}, new float[]{0,0,0,0}, null);
-        g.drawImage(img, op, 0, 0);
-        g.dispose();
+        if (alpha == 0) {
+            return image;
+        }
 
-        img = newImg;
+        float[] scalefactors = {1, 1, 1, (float)alpha};
+        float[] offsets = {0,0,0,0};
+        RescaleOp op = new RescaleOp(scalefactors, offsets, null);
+        return op.filter(image, null);
     }
 
 
index 3a4ea04c4c583e58ee39176cf9556dba2bc10131..39db61492b59441a66cd615c31c8f84aeae67e53 100644 (file)
@@ -30,10 +30,12 @@ import java.io.IOException;
 import java.io.InputStream;
 
 import org.apache.poi.hemf.usermodel.HemfPicture;
+import org.apache.poi.sl.draw.BitmapImageRenderer;
 import org.apache.poi.sl.draw.ImageRenderer;
 import org.apache.poi.sl.usermodel.PictureData;
 import org.apache.poi.util.Units;
 
+@SuppressWarnings("unused")
 public class HemfImageRenderer implements ImageRenderer {
     HemfPicture image;
     double alpha;
@@ -89,16 +91,7 @@ public class HemfImageRenderer implements ImageRenderer {
         image.draw(g, new Rectangle2D.Double(0,0,dim.getWidth(),dim.getHeight()));
         g.dispose();
 
-        if (alpha != 0) {
-            BufferedImage newImg = new BufferedImage((int)dim.getWidth(), (int)dim.getHeight(), BufferedImage.TYPE_INT_ARGB);
-            g = newImg.createGraphics();
-            RescaleOp op = new RescaleOp(new float[]{1.0f, 1.0f, 1.0f, (float)alpha}, new float[]{0,0,0,0}, null);
-            g.drawImage(bufImg, op, 0, 0);
-            g.dispose();
-            bufImg = newImg;
-        }
-
-        return bufImg;
+        return BitmapImageRenderer.setAlpha(bufImg, alpha);
     }
 
     @Override
index f30bdc34d22304e8afe3d44ac1cb66625ed9f6f5..bc96032f030b84c16983b835eaa9feb11ab7e51a 100644 (file)
@@ -30,6 +30,7 @@ import java.io.IOException;
 import java.io.InputStream;
 
 import org.apache.poi.hwmf.usermodel.HwmfPicture;
+import org.apache.poi.sl.draw.BitmapImageRenderer;
 import org.apache.poi.sl.draw.DrawPictureShape;
 import org.apache.poi.sl.draw.ImageRenderer;
 import org.apache.poi.sl.usermodel.PictureData.PictureType;
@@ -93,17 +94,8 @@ public class HwmfImageRenderer implements ImageRenderer {
         g.setRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS, RenderingHints.VALUE_FRACTIONALMETRICS_ON);
         image.draw(g, new Rectangle2D.Double(0,0,dim.getWidth(),dim.getHeight()));
         g.dispose();
-        
-        if (alpha != 0) {
-            BufferedImage newImg = new BufferedImage((int)dim.getWidth(), (int)dim.getHeight(), BufferedImage.TYPE_INT_ARGB);
-            g = newImg.createGraphics();
-            RescaleOp op = new RescaleOp(new float[]{1.0f, 1.0f, 1.0f, (float)alpha}, new float[]{0,0,0,0}, null);
-            g.drawImage(bufImg, op, 0, 0);
-            g.dispose();
-            bufImg = newImg;
-        }
-        
-        return bufImg;
+
+        return BitmapImageRenderer.setAlpha(bufImg, alpha);
     }
     
     @Override