[ 
https://issues.apache.org/jira/browse/PDFBOX-5970?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17933907#comment-17933907
 ] 

Simon Steiner commented on PDFBOX-5970:
---------------------------------------

Seems it wasnt part of pdfbox, its not letting me attach it

{code:java}
 .../graphics/color/DeviceCMYKColorSpace.java  | 93 +++++++++++++++++++
 .../pdmodel/graphics/color/PDDeviceCMYK.java  | 15 +++
 .../graphics/color/PDDeviceCMYKTestCase.java  | 38 ++++++++
 3 files changed, 146 insertions(+)
 create mode 100644 
pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/DeviceCMYKColorSpace.java
 create mode 100644 
pdfbox/src/test/java/org/apache/pdfbox/pdmodel/graphics/color/PDDeviceCMYKTestCase.java

diff --git 
a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/DeviceCMYKColorSpace.java
 
b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/DeviceCMYKColorSpace.java
new file mode 100644
index 00000000..462c8e09
--- /dev/null
+++ 
b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/DeviceCMYKColorSpace.java
@@ -0,0 +1,93 @@
+/*
+ * 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.pdfbox.pdmodel.graphics.color;
+
+import java.awt.color.ColorSpace;
+
+/**
+ * This class represents an uncalibrated CMYK color space.
+ */
+public class DeviceCMYKColorSpace extends ColorSpace {
+
+    private static final long serialVersionUID = 2925508946083542974L;
+
+    /** The name for the uncalibrated CMYK pseudo-profile */
+    public static final String PSEUDO_PROFILE_NAME = "#CMYK";
+
+    /**
+     * Constructs an uncalibrated CMYK ColorSpace object with 
ColorSpace#TYPE_CMYK and
+     * 4 components.
+     * @see java.awt.color.ColorSpace#ColorSpace(int, int)
+     */
+    public DeviceCMYKColorSpace() {
+        super(TYPE_CMYK, 4);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public float[] toRGB(float[] colorvalue) {
+        return new float [] {
+                (1 - colorvalue[0]) * (1 - colorvalue[3]),
+                (1 - colorvalue[1]) * (1 - colorvalue[3]),
+                (1 - colorvalue[2]) * (1 - colorvalue[3])};
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public float[] fromRGB(float[] rgbvalue) {
+        assert rgbvalue.length == 3;
+        //Note: this is an arbitrary conversion, not a color-managed one!
+        float r = rgbvalue[0];
+        float g = rgbvalue[1];
+        float b = rgbvalue[2];
+        if (r == g && r == b) {
+            return new float[] {0, 0, 0, 1 - r};
+        } else {
+            float c = 1 - r;
+            float m = 1 - g;
+            float y = 1 - b;
+            float k = Math.min(c, Math.min(m, y));
+            return new float[] {c, m, y, k};
+        }
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public float[] toCIEXYZ(float[] colorvalue) {
+        throw new UnsupportedOperationException("NYI");
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public float[] fromCIEXYZ(float[] colorvalue) {
+        throw new UnsupportedOperationException("NYI");
+    }
+
+    /** {@inheritDoc} */
+    public String getProfileName() {
+        return PSEUDO_PROFILE_NAME;
+    }
+
+    /** {@inheritDoc} */
+    public String getProfileURI() {
+        return null; //No URI
+    }
+
+}
diff --git 
a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDDeviceCMYK.java
 
b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDDeviceCMYK.java
index c1fa6016..aaa11a91 100644
--- 
a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDDeviceCMYK.java
+++ 
b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDDeviceCMYK.java
@@ -16,8 +16,13 @@
  */
 package org.apache.pdfbox.pdmodel.graphics.color;
 
+import java.awt.Color;
+import java.awt.Paint;
+import java.awt.geom.AffineTransform;
 import java.net.URL;
 import org.apache.pdfbox.cos.COSName;
+import org.apache.pdfbox.rendering.PDFRenderer;
+import org.apache.pdfbox.util.Matrix;
 
 import java.awt.color.ICC_ColorSpace;
 import java.awt.color.ICC_Profile;
@@ -126,4 +131,14 @@ public class PDDeviceCMYK extends PDDeviceColorSpace
     {
         return toRGBImageAWT(raster, awtColorSpace);
     }
+
+    public Paint toPaint(PDFRenderer renderer, PDColor color, Matrix 
subStreamMatrix,
+                         AffineTransform xform) throws IOException
+    {
+        float[] components = color.getComponents();
+        if (components.length == 4) {
+            return new Color(new DeviceCMYKColorSpace(), components, 1);
+        }
+        return super.toPaint(renderer, color, subStreamMatrix, xform);
+    }
 }
diff --git 
a/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/graphics/color/PDDeviceCMYKTestCase.java
 
b/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/graphics/color/PDDeviceCMYKTestCase.java
new file mode 100644
index 00000000..08df972e
--- /dev/null
+++ 
b/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/graphics/color/PDDeviceCMYKTestCase.java
@@ -0,0 +1,38 @@
+/*
+ * 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.pdfbox.pdmodel.graphics.color;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+import java.awt.Color;
+import java.awt.color.ColorSpace;
+import java.io.IOException;
+
+public class PDDeviceCMYKTestCase {
+    @Test
+    public void testCMYK() throws IOException {
+        float[] black = {0, 0, 0, 1};
+        PDColor pdColor = new PDColor(black, null);
+        Color color = (Color) new PDDeviceCMYK().toPaint(null, pdColor, null, 
null);
+        Assert.assertEquals(color.getColorSpace().getType(), 
ColorSpace.TYPE_CMYK);
+        float[] blackWithAlpha = {0, 0, 0, 1, 1};
+        Assert.assertArrayEquals(color.getComponents(null), blackWithAlpha, 0);
+    }
+}
-- 
2.48.1


{code}


> CMYK color converted to RGB
> ---------------------------
>
>                 Key: PDFBOX-5970
>                 URL: https://issues.apache.org/jira/browse/PDFBOX-5970
>             Project: PDFBox
>          Issue Type: Bug
>            Reporter: Simon Steiner
>            Priority: Major
>         Attachments: adobe4.pdf, screenshot-1.png
>
>
> In pdfbox 2, if i set a breakpoint on PageDrawer:
> protected Paint getPaint(PDColor color) throws IOException
> And call org.apache.pdfbox.tools.PDFToImage
> I see cmyk black text is converted to RGB, i expect result should be 
> Color.black as pdfbox used to do via:
> float[] components = color.getComponents();
>                 return new Color(new DeviceCMYKColorSpace(), components, 1);



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@pdfbox.apache.org
For additional commands, e-mail: dev-h...@pdfbox.apache.org

Reply via email to