You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pdfbox.apache.org by le...@apache.org on 2013/01/06 14:15:27 UTC
svn commit: r1429514 - in
/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading:
AxialShadingContext.java RadialShadingContext.java
Author: lehmi
Date: Sun Jan 6 13:15:27 2013
New Revision: 1429514
URL: http://svn.apache.org/viewvc?rev=1429514&view=rev
Log:
PDFBOX-1482: take tint transformation into account when creating a shading color context
Modified:
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/AxialShadingContext.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/RadialShadingContext.java
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/AxialShadingContext.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/AxialShadingContext.java?rev=1429514&r1=1429513&r2=1429514&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/AxialShadingContext.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/AxialShadingContext.java Sun Jan 6 13:15:27 2013
@@ -30,7 +30,9 @@ import org.apache.pdfbox.cos.COSArray;
import org.apache.pdfbox.cos.COSBoolean;
import org.apache.pdfbox.pdmodel.common.function.PDFunction;
import org.apache.pdfbox.pdmodel.graphics.color.PDColorSpace;
+import org.apache.pdfbox.pdmodel.graphics.color.PDDeviceN;
import org.apache.pdfbox.pdmodel.graphics.color.PDDeviceRGB;
+import org.apache.pdfbox.pdmodel.graphics.color.PDSeparation;
import org.apache.pdfbox.util.Matrix;
/**
@@ -46,6 +48,7 @@ public class AxialShadingContext impleme
private ColorModel colorModel;
private PDFunction function;
private ColorSpace shadingColorSpace;
+ private PDFunction shadingTinttransform;
private float[] coords;
private float[] domain;
@@ -103,6 +106,14 @@ public class AxialShadingContext impleme
{
// we have to create an instance of the shading colorspace if it isn't RGB
shadingColorSpace = cs.getJavaColorSpace();
+ if (cs instanceof PDDeviceN)
+ {
+ shadingTinttransform = ((PDDeviceN)cs).getTintTransform();
+ }
+ else if (cs instanceof PDSeparation)
+ {
+ shadingTinttransform = ((PDSeparation)cs).getTintTransform();
+ }
}
}
catch (IOException exception)
@@ -173,6 +184,8 @@ public class AxialShadingContext impleme
{
colorModel = null;
function = null;
+ shadingColorSpace = null;
+ shadingTinttransform = null;
}
/**
@@ -227,20 +240,24 @@ public class AxialShadingContext impleme
}
input[0] = (float)(domain[0] + (d1d0*inputValue));
float[] values = null;
+ int index = (j * w + i) * 3;
try
{
values = function.eval(input);
+ // convert color values from shading colorspace to RGB
+ if (shadingColorSpace != null)
+ {
+ if (shadingTinttransform != null)
+ {
+ values = shadingTinttransform.eval(values);
+ }
+ values = shadingColorSpace.toRGB(values);
+ }
}
catch (IOException exception)
{
LOG.error("error while processing a function", exception);
}
- int index = (j * w + i) * 3;
- // convert color values from shading colorspace to RGB
- if (shadingColorSpace != null)
- {
- values = shadingColorSpace.toRGB(values);
- }
data[index] = (int)(values[0]*255);
data[index+1] = (int)(values[1]*255);
data[index+2] = (int)(values[2]*255);
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/RadialShadingContext.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/RadialShadingContext.java?rev=1429514&r1=1429513&r2=1429514&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/RadialShadingContext.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/RadialShadingContext.java Sun Jan 6 13:15:27 2013
@@ -30,7 +30,9 @@ import org.apache.pdfbox.cos.COSArray;
import org.apache.pdfbox.cos.COSBoolean;
import org.apache.pdfbox.pdmodel.common.function.PDFunction;
import org.apache.pdfbox.pdmodel.graphics.color.PDColorSpace;
+import org.apache.pdfbox.pdmodel.graphics.color.PDDeviceN;
import org.apache.pdfbox.pdmodel.graphics.color.PDDeviceRGB;
+import org.apache.pdfbox.pdmodel.graphics.color.PDSeparation;
import org.apache.pdfbox.util.Matrix;
/**
@@ -46,6 +48,7 @@ public class RadialShadingContext implem
private ColorModel colorModel;
private PDFunction function;
private ColorSpace shadingColorSpace;
+ private PDFunction shadingTinttransform;
private float[] coords;
private float[] domain;
@@ -63,7 +66,7 @@ public class RadialShadingContext implem
/**
* Log instance.
*/
- private static final Log LOG = LogFactory.getLog(AxialShadingContext.class);
+ private static final Log LOG = LogFactory.getLog(RadialShadingContext.class);
/**
* Constructor creates an instance to be used for fill operations.
@@ -110,6 +113,14 @@ public class RadialShadingContext implem
{
// we have to create an instance of the shading colorspace if it isn't RGB
shadingColorSpace = cs.getJavaColorSpace();
+ if (cs instanceof PDDeviceN)
+ {
+ shadingTinttransform = ((PDDeviceN)cs).getTintTransform();
+ }
+ else if (cs instanceof PDSeparation)
+ {
+ shadingTinttransform = ((PDSeparation)cs).getTintTransform();
+ }
}
}
catch (IOException exception)
@@ -184,6 +195,8 @@ public class RadialShadingContext implem
{
colorModel = null;
function = null;
+ shadingColorSpace = null;
+ shadingTinttransform = null;
}
/**
@@ -265,20 +278,24 @@ public class RadialShadingContext implem
}
input[0] = (float)(domain[0] + (d1d0*inputValue));
float[] values = null;
+ int index = (j * w + i) * 3;
try
{
values = function.eval(input);
- }
+ // convert color values from shading colorspace to RGB
+ if (shadingColorSpace != null)
+ {
+ if (shadingTinttransform != null)
+ {
+ values = shadingTinttransform.eval(values);
+ }
+ values = shadingColorSpace.toRGB(values);
+ }
+ }
catch (IOException exception)
{
LOG.error("error while processing a function", exception);
}
- int index = (j * w + i) * 3;
- // convert color values from shading colorspace to RGB
- if (shadingColorSpace != null)
- {
- values = shadingColorSpace.toRGB(values);
- }
data[index] = (int)(values[0]*255);
data[index+1] = (int)(values[1]*255);
data[index+2] = (int)(values[2]*255);