Author: ssteiner
Date: Thu Sep  1 10:24:22 2022
New Revision: 1903807

URL: http://svn.apache.org/viewvc?rev=1903807&view=rev
Log:
FOP-3091: Add transparency color support for PS

Added:
    
xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/render/ps/PSPainterUtil.java
   (with props)
    
xmlgraphics/fop/trunk/fop-core/src/test/java/org/apache/fop/render/ps/PSPainterUtilTestCase.java
   (with props)
Modified:
    
xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/render/ps/PSImageHandlerRenderedImage.java
    
xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/render/ps/PSPainter.java

Modified: 
xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/render/ps/PSImageHandlerRenderedImage.java
URL: 
http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/render/ps/PSImageHandlerRenderedImage.java?rev=1903807&r1=1903806&r2=1903807&view=diff
==============================================================================
--- 
xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/render/ps/PSImageHandlerRenderedImage.java
 (original)
+++ 
xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/render/ps/PSImageHandlerRenderedImage.java
 Thu Sep  1 10:24:22 2022
@@ -83,7 +83,7 @@ public class PSImageHandlerRenderedImage
         ImageEncodingHelper helper = new ImageEncodingHelper(ri);
         ColorModel cm = helper.getEncodedColorModel();
 
-        PSImageUtils.writeImage(encoder, imgDim, imgDescription, targetRect, 
cm, gen, ri, null);
+        PSImageUtils.writeImage(encoder, imgDim, imgDescription, targetRect, 
cm, gen, ri, false);
     }
 
     /** {@inheritDoc} */

Modified: 
xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/render/ps/PSPainter.java
URL: 
http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/render/ps/PSPainter.java?rev=1903807&r1=1903806&r2=1903807&view=diff
==============================================================================
--- 
xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/render/ps/PSPainter.java
 (original)
+++ 
xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/render/ps/PSPainter.java
 Thu Sep  1 10:24:22 2022
@@ -24,6 +24,7 @@ import java.awt.Dimension;
 import java.awt.Paint;
 import java.awt.Point;
 import java.awt.Rectangle;
+import java.awt.Transparency;
 import java.awt.geom.AffineTransform;
 import java.io.IOException;
 import java.util.Map;
@@ -232,9 +233,12 @@ public class PSPainter extends AbstractI
                         throw new UnsupportedOperationException("Non-Color 
paints NYI");
                     }
                 }
-                generator.defineRect(rect.x / 1000.0, rect.y / 1000.0,
-                        rect.width / 1000.0, rect.height / 1000.0);
-                generator.writeln(generator.mapCommand("fill"));
+                if (fill.getTransparency() != Transparency.OPAQUE) {
+                    PSPainterUtil.drawTransparency(generator, rect, fill);
+                } else {
+                    generator.defineRect(rect.x / 1000.0, rect.y / 1000.0, 
rect.width / 1000.0, rect.height / 1000.0);
+                    generator.writeln(generator.mapCommand("fill"));
+                }
             } catch (IOException ioe) {
                 throw new IFException("I/O error in fillRect()", ioe);
             }

Added: 
xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/render/ps/PSPainterUtil.java
URL: 
http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/render/ps/PSPainterUtil.java?rev=1903807&view=auto
==============================================================================
--- 
xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/render/ps/PSPainterUtil.java
 (added)
+++ 
xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/render/ps/PSPainterUtil.java
 Thu Sep  1 10:24:22 2022
@@ -0,0 +1,60 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Id$ */
+package org.apache.fop.render.ps;
+
+import java.awt.Color;
+import java.awt.Dimension;
+import java.awt.Graphics;
+import java.awt.Paint;
+import java.awt.Rectangle;
+import java.awt.image.BufferedImage;
+import java.awt.image.RenderedImage;
+
+import org.apache.xmlgraphics.java2d.GraphicContext;
+import org.apache.xmlgraphics.java2d.ps.PSGraphics2D;
+import org.apache.xmlgraphics.ps.PSGenerator;
+
+import org.apache.fop.util.bitmap.BitmapImageUtil;
+
+public final class PSPainterUtil {
+    private PSPainterUtil() {
+    }
+
+    public static void drawTransparency(PSGenerator generator, Rectangle rect, 
Paint fill) {
+        PSGraphics2D graphics = new PSGraphics2D(true, generator);
+        graphics.setGraphicContext(new GraphicContext());
+        BufferedImage image = buildImage((Color) fill, rect.width / 1000, 
rect.height / 1000);
+        RenderedImage mask = buildMaskImage(image, rect.width / 1000, 
rect.height / 1000);
+        graphics.drawImage(image, rect.x / 1000, rect.y / 1000, null, null, 
mask);
+    }
+
+    private static BufferedImage buildImage(Color color, int width, int 
height) {
+        BufferedImage bufferedImage = new BufferedImage(width, height, 
BufferedImage.TYPE_INT_ARGB);
+        Graphics graphics = bufferedImage.getGraphics();
+        Color alpha = new Color(color.getAlpha(), color.getAlpha(), 
color.getAlpha());
+        graphics.setColor(alpha);
+        graphics.fillRect(0, 0, width, height);
+        graphics.dispose();
+        return bufferedImage;
+    }
+
+    private static RenderedImage buildMaskImage(BufferedImage image, int 
width, int height) {
+        return BitmapImageUtil.convertToMonochrome(image, new Dimension(width, 
height), 1);
+    }
+}

Propchange: 
xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/render/ps/PSPainterUtil.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: 
xmlgraphics/fop/trunk/fop-core/src/test/java/org/apache/fop/render/ps/PSPainterUtilTestCase.java
URL: 
http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/fop-core/src/test/java/org/apache/fop/render/ps/PSPainterUtilTestCase.java?rev=1903807&view=auto
==============================================================================
--- 
xmlgraphics/fop/trunk/fop-core/src/test/java/org/apache/fop/render/ps/PSPainterUtilTestCase.java
 (added)
+++ 
xmlgraphics/fop/trunk/fop-core/src/test/java/org/apache/fop/render/ps/PSPainterUtilTestCase.java
 Thu Sep  1 10:24:22 2022
@@ -0,0 +1,37 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.fop.render.ps;
+
+import java.awt.Color;
+import java.awt.Rectangle;
+import java.io.ByteArrayOutputStream;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+import org.apache.xmlgraphics.ps.PSGenerator;
+
+public class PSPainterUtilTestCase {
+    @Test
+    public void testDrawTransparency() {
+        ByteArrayOutputStream bos = new ByteArrayOutputStream();
+        PSGenerator generator = new PSGenerator(bos);
+        Color color = new Color(0, 0, 0, 128);
+        PSPainterUtil.drawTransparency(generator, new Rectangle(10000, 10000), 
color);
+        Assert.assertTrue(bos.toString().contains("imagemask"));
+    }
+}

Propchange: 
xmlgraphics/fop/trunk/fop-core/src/test/java/org/apache/fop/render/ps/PSPainterUtilTestCase.java
------------------------------------------------------------------------------
    svn:eol-style = native



---------------------------------------------------------------------
To unsubscribe, e-mail: fop-commits-unsubscr...@xmlgraphics.apache.org
For additional commands, e-mail: fop-commits-h...@xmlgraphics.apache.org

Reply via email to