XGC-128: Remove image transparency for PS

git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/commons/trunk@1896317 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/src/main/java/org/apache/xmlgraphics/ps/ImageEncodingHelper.java b/src/main/java/org/apache/xmlgraphics/ps/ImageEncodingHelper.java
index 576d93a..1a91882 100644
--- a/src/main/java/org/apache/xmlgraphics/ps/ImageEncodingHelper.java
+++ b/src/main/java/org/apache/xmlgraphics/ps/ImageEncodingHelper.java
@@ -19,6 +19,8 @@
 
 package org.apache.xmlgraphics.ps;
 
+import java.awt.Color;
+import java.awt.Graphics2D;
 import java.awt.color.ColorSpace;
 import java.awt.image.BufferedImage;
 import java.awt.image.ColorModel;
@@ -487,8 +489,18 @@
 
         private final RenderedImage img;
 
-        public RenderedImageEncoder(RenderedImage img) {
-            this.img = img;
+        public RenderedImageEncoder(RenderedImage ri) {
+            if (ri instanceof BufferedImage && ((BufferedImage) ri).getType() == BufferedImage.TYPE_4BYTE_ABGR) {
+                BufferedImage convertedImg =
+                        new BufferedImage(ri.getWidth(), ri.getHeight(), BufferedImage.TYPE_INT_RGB);
+                Graphics2D g = (Graphics2D) convertedImg.getGraphics();
+                g.setBackground(Color.WHITE);
+                g.clearRect(0, 0, ri.getWidth(), ri.getHeight());
+                g.drawImage((BufferedImage)ri, 0, 0, null);
+                g.dispose();
+                ri = convertedImg;
+            }
+            img = ri;
         }
 
         public void writeTo(OutputStream out) throws IOException {
diff --git a/src/test/java/org/apache/xmlgraphics/ps/FormGeneratorTestCase.java b/src/test/java/org/apache/xmlgraphics/ps/FormGeneratorTestCase.java
index 1754906..89ad8d4 100644
--- a/src/test/java/org/apache/xmlgraphics/ps/FormGeneratorTestCase.java
+++ b/src/test/java/org/apache/xmlgraphics/ps/FormGeneratorTestCase.java
@@ -21,9 +21,9 @@
 
 import java.awt.Color;
 import java.awt.Dimension;
+import java.awt.Graphics2D;
 import java.awt.color.ColorSpace;
 
-
 import java.awt.geom.Dimension2D;
 import java.awt.image.BufferedImage;
 
@@ -100,4 +100,28 @@
         //FlateDecode at DataSource so executed on page load rather than document load so viewer loads faster
         Assert.assertTrue(test.contains("/DataSource form:Data /FlateDecode filter\n"));
     }
+
+    @Test
+    public void testAlphaImage() throws IOException {
+        Assert.assertEquals(buildPSImage(BufferedImage.TYPE_4BYTE_ABGR), buildPSImage(BufferedImage.TYPE_INT_RGB));
+    }
+
+    private String buildPSImage(int type) throws IOException {
+        Dimension2D dimension = new Dimension2DDouble(1, 1);
+        BufferedImage im = new BufferedImage(1, 1, type);
+        Graphics2D g = (Graphics2D) im.getGraphics();
+        if (type == BufferedImage.TYPE_4BYTE_ABGR) {
+            g.setBackground(new Color(0, 0, 0, 0));
+        } else {
+            g.setBackground(Color.white);
+        }
+        g.clearRect(0, 0, im.getWidth(), im.getHeight());
+        g.drawImage(im, 0, 0, null);
+        g.dispose();
+        ByteArrayOutputStream out = new ByteArrayOutputStream();
+        ImageFormGenerator formImageGen = new  ImageFormGenerator("form", "title", dimension, im, false);
+        PSGenerator gen = new PSGenerator(out);
+        formImageGen.generate(gen);
+        return out.toString("utf-8");
+    }
 }