# 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);
- }
-}