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