Author: lehmi Date: Wed Sep 25 06:26:38 2024 New Revision: 1920894 URL: http://svn.apache.org/viewvc?rev=1920894&view=rev Log: PDFBOX-5852: replace Integer with int, add some minor optimizations
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/GouraudShadingContext.java pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/PatchMeshesShadingContext.java pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/TriangleBasedShadingContext.java Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/GouraudShadingContext.java URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/GouraudShadingContext.java?rev=1920894&r1=1920893&r2=1920894&view=diff ============================================================================== --- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/GouraudShadingContext.java (original) +++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/GouraudShadingContext.java Wed Sep 25 06:26:38 2024 @@ -21,6 +21,7 @@ import java.awt.geom.AffineTransform; import java.awt.image.ColorModel; import java.io.IOException; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import org.apache.pdfbox.util.Matrix; @@ -59,9 +60,14 @@ abstract class GouraudShadingContext ext } @Override - protected Integer[][] calcPixelTableArray(Rectangle deviceBounds) throws IOException + protected int[][] calcPixelTableArray(Rectangle deviceBounds) throws IOException { - Integer[][] array = new Integer[deviceBounds.width + 1][deviceBounds.height + 1]; + int[][] array = new int[deviceBounds.width + 1][deviceBounds.height + 1]; + int initialValue = getBackground() != null ? getRgbBackground() : -1; + for (int i = 0; i < deviceBounds.width + 1; i++) + { + Arrays.fill(array[i], initialValue); + } calcPixelTable(triangleList, array, deviceBounds); return array; } Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/PatchMeshesShadingContext.java URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/PatchMeshesShadingContext.java?rev=1920894&r1=1920893&r2=1920894&view=diff ============================================================================== --- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/PatchMeshesShadingContext.java (original) +++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/PatchMeshesShadingContext.java Wed Sep 25 06:26:38 2024 @@ -19,6 +19,7 @@ import java.awt.Rectangle; import java.awt.geom.AffineTransform; import java.awt.image.ColorModel; import java.io.IOException; +import java.util.Arrays; import java.util.List; import org.apache.pdfbox.util.Matrix; @@ -57,9 +58,14 @@ abstract class PatchMeshesShadingContext } @Override - protected Integer[][] calcPixelTableArray(Rectangle deviceBounds) throws IOException + protected int[][] calcPixelTableArray(Rectangle deviceBounds) throws IOException { - Integer[][] array = new Integer[deviceBounds.width][deviceBounds.height]; + int[][] array = new int[deviceBounds.width][deviceBounds.height]; + int initialValue = getBackground() != null ? getRgbBackground() : -1; + for (int i = 0; i < deviceBounds.width + 1; i++) + { + Arrays.fill(array[i], initialValue); + } for (Patch it : patchList) { calcPixelTable(it.listOfTriangles, array, deviceBounds); Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/TriangleBasedShadingContext.java URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/TriangleBasedShadingContext.java?rev=1920894&r1=1920893&r2=1920894&view=diff ============================================================================== --- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/TriangleBasedShadingContext.java (original) +++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/TriangleBasedShadingContext.java Wed Sep 25 06:26:38 2024 @@ -36,7 +36,7 @@ import org.apache.pdfbox.util.Matrix; abstract class TriangleBasedShadingContext extends ShadingContext { // array of pixels within triangles to their RGB color - private Integer[][] pixelTableArray; + private int[][] pixelTableArray; // offset to be used for the array index private int xOffset = 0; @@ -72,12 +72,12 @@ abstract class TriangleBasedShadingConte * * @return an array which contains all the points' positions and colors of one image */ - abstract Integer[][] calcPixelTableArray(Rectangle deviceBounds) throws IOException; + abstract int[][] calcPixelTableArray(Rectangle deviceBounds) throws IOException; /** * Get the points from the triangles, calculate their color and add point-color mappings. */ - protected void calcPixelTable(List<ShadedTriangle> triangleList, Integer[][] array, + protected void calcPixelTable(List<ShadedTriangle> triangleList, int[][] array, Rectangle deviceBounds) throws IOException { for (ShadedTriangle tri : triangleList) @@ -85,11 +85,7 @@ abstract class TriangleBasedShadingConte int degree = tri.getDeg(); if (degree == 2) { - Line line = tri.getLine(); - for (Point p : line.linePoints) - { - addValueToArray(p, evalFunctionAndConvertToRGB(line.calcColor(p)), array); - } + addLinePoints(tri.getLine(), array); } else { @@ -111,7 +107,6 @@ abstract class TriangleBasedShadingConte } } } - // "fatten" triangle by drawing the borders with Bresenham's line algorithm // Inspiration: Raph Levien in http://bugs.ghostscript.com/show_bug.cgi?id=219588 Point p0 = new Point((int) Math.round(tri.corner[0].getX()), @@ -120,26 +115,22 @@ abstract class TriangleBasedShadingConte (int) Math.round(tri.corner[1].getY())); Point p2 = new Point((int) Math.round(tri.corner[2].getX()), (int) Math.round(tri.corner[2].getY())); - Line l1 = new Line(p0, p1, tri.color[0], tri.color[1]); - Line l2 = new Line(p1, p2, tri.color[1], tri.color[2]); - Line l3 = new Line(p2, p0, tri.color[2], tri.color[0]); - for (Point p : l1.linePoints) - { - addValueToArray(p, evalFunctionAndConvertToRGB(l1.calcColor(p)), array); - } - for (Point p : l2.linePoints) - { - addValueToArray(p, evalFunctionAndConvertToRGB(l2.calcColor(p)), array); - } - for (Point p : l3.linePoints) - { - addValueToArray(p, evalFunctionAndConvertToRGB(l3.calcColor(p)), array); - } + addLinePoints(new Line(p0, p1, tri.color[0], tri.color[1]), array); + addLinePoints(new Line(p1, p2, tri.color[1], tri.color[2]), array); + addLinePoints(new Line(p2, p0, tri.color[2], tri.color[0]), array); } } } - private void addValueToArray(Point p, int value, Integer[][] array) + private void addLinePoints(Line line, int[][] array) throws IOException + { + for (Point p : line.linePoints) + { + addValueToArray(p, evalFunctionAndConvertToRGB(line.calcColor(p)), array); + } + } + + private void addValueToArray(Point p, int value, int[][] array) { int xIndex = p.x + xOffset; int yIndex = p.y + yOffset; @@ -150,14 +141,14 @@ abstract class TriangleBasedShadingConte array[xIndex][yIndex] = value; } - private Integer getValueFromArray(int x, int y) + private int getValueFromArray(int x, int y) { int xIndex = x + xOffset; int yIndex = y + yOffset; if (xIndex < 0 || yIndex < 0 || xIndex >= pixelTableArray.length || yIndex >= pixelTableArray[0].length) { - return null; + return -1; } return pixelTableArray[xIndex][yIndex]; } @@ -191,27 +182,17 @@ abstract class TriangleBasedShadingConte { for (int col = 0; col < w; col++) { - int value; - Integer v = getValueFromArray(x + col, y + row); - if (v != null) + int value = getValueFromArray(x + col, y + row); + if (value >= 0) { - value = v; - } - else - { - if (getBackground() == null) - { - continue; - } - value = getRgbBackground(); + int index = (row * w + col) * 4; + data[index] = value & 255; + value >>= 8; + data[index + 1] = value & 255; + value >>= 8; + data[index + 2] = value & 255; + data[index + 3] = 255; } - int index = (row * w + col) * 4; - data[index] = value & 255; - value >>= 8; - data[index + 1] = value & 255; - value >>= 8; - data[index + 2] = value & 255; - data[index + 3] = 255; } } }