# This patch file was generated by NetBeans IDE # It uses platform neutral UTF-8 encoding and \n newlines. --- ColoredTilingPaint.java (1566760) +++ Current File @@ -16,6 +16,7 @@ */ package org.apache.pdfbox.pdmodel.graphics.pattern.tiling; +import java.awt.Graphics; import java.awt.Paint; import java.awt.PaintContext; import java.awt.Rectangle; @@ -24,7 +25,6 @@ import java.awt.color.ColorSpace; import java.awt.geom.AffineTransform; import java.awt.geom.Rectangle2D; -import java.awt.image.AffineTransformOp; import java.awt.image.BufferedImage; import java.awt.image.ColorModel; import java.awt.image.ComponentColorModel; @@ -74,7 +74,7 @@ { // get the pattern matrix Matrix patternMatrix = patternResources.getMatrix(); - AffineTransform patternAT = patternMatrix != null ? patternMatrix.createAffineTransform() : null; + AffineTransform patternAT = patternMatrix != null ? patternMatrix.createAffineTransform() : new AffineTransform(); // get the bounding box PDRectangle box = patternResources.getBBox(); @@ -82,61 +82,49 @@ (int) box.getWidth(), (int) box.getHeight()); rect = xform.createTransformedShape(rect).getBounds2D(); - int width = (int) rect.getWidth(); - int height = (int) rect.getHeight(); - - if (patternAT != null) - { rect = patternAT.createTransformedShape(rect).getBounds2D(); - } + + AffineTransform tmpAT = (AffineTransform) patternAT.clone(); + tmpAT.concatenate(xform); + double scaleX = tmpAT.getScaleX(); + double scaleY = tmpAT.getScaleY(); + tmpAT.setToTranslation(0, rect.getHeight()); + tmpAT.scale(Math.abs(scaleX), -Math.abs(scaleY)); + Matrix tmpMatrix = new Matrix(); + tmpMatrix.setFromAffineTransform(tmpAT); + PDRectangle bBox = new PDRectangle((float) rect.getMinX(), (float) rect.getMinY(), (float) rect.getMaxX(), (float) rect.getMaxY()); // xStep + yStep - double[] steps = new double[] { patternResources.getXStep(), patternResources.getYStep() }; - xform.deltaTransform(steps, 0, steps, 0, 1); - if (patternAT != null) + double[] steps = new double[] { + patternResources.getXStep(), patternResources.getYStep() + }; + xform.deltaTransform(steps, 0, steps, 0, 1); patternAT.deltaTransform(steps, 0, steps, 0, 1); - } int xStep = (int) (steps[0]); int yStep = (int) (steps[1]); ColorSpace outputCS = ColorSpace.getInstance(ColorSpace.CS_sRGB); outputColorModel = new ComponentColorModel(outputCS, true, false, Transparency.TRANSLUCENT, DataBuffer.TYPE_BYTE); - WritableRaster raster = outputColorModel.createCompatibleWritableRaster(width, height); + WritableRaster raster = outputColorModel.createCompatibleWritableRaster((int) rect.getWidth(), (int) rect.getHeight()); BufferedImage image = new BufferedImage(outputColorModel, raster, false, null); - BufferedImage tilingImage = null; try { PageDrawer drawer = new PageDrawer(); - drawer.drawStream(image.getGraphics(), (COSStream) patternResources.getCOSObject(), - patternResources.getResources(), box); + Graphics g = image.getGraphics(); + drawer.drawStream(g, (COSStream) patternResources.getCOSObject(), patternResources.getResources(), bBox, tmpMatrix); drawer.dispose(); + g.dispose(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } - - AffineTransform imageTransform = null; - if (patternAT != null && !patternAT.isIdentity()) - { - // get the scaling factor for each dimension - imageTransform = AffineTransform.getScaleInstance(patternMatrix.getXScale(), patternMatrix.getYScale()); + return new ColoredTilingContext(outputColorModel, image.getData(), xStep, yStep, bBox); } - else - { - imageTransform = new AffineTransform(); } - imageTransform.scale(1.0, -1.0); - imageTransform.translate(0, -height); - AffineTransformOp scaleOP = new AffineTransformOp(imageTransform, AffineTransformOp.TYPE_BILINEAR); - tilingImage = scaleOP.filter(image, null); - - return new ColoredTilingContext(outputColorModel, tilingImage.getData(), xStep, yStep, bBox); - } -}