You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pdfbox.apache.org by da...@apache.org on 2010/04/09 01:38:31 UTC
svn commit: r932179 -
/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDColorState.java
Author: danielwilson
Date: Thu Apr 8 23:38:31 2010
New Revision: 932179
URL: http://svn.apache.org/viewvc?rev=932179&view=rev
Log:
Don't fail to BLACK quite so quickly ... do some more intelligent guessing.
Necessary when implementing in .Net as there are still some key things IKVM is missing.
Modified:
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDColorState.java
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDColorState.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDColorState.java?rev=932179&r1=932178&r2=932179&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDColorState.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDColorState.java Thu Apr 8 23:38:31 2010
@@ -171,10 +171,53 @@ public class PDColorState implements Clo
// from the potentially complex color management code.
catch (Exception e)
{
- log.warn("Unable to create the color instance "
+ Color cGuess;
+ String sMsg = "Unable to create the color instance "
+ Arrays.toString(components) + " in color space "
- + colorSpace + "; using black instead", e);
- return Color.BLACK;
+ + colorSpace + "; guessing color ... ";
+ try
+ {
+ switch(components.length)
+ {
+ case 1://Use that component as a single-integer RGB value
+ cGuess = new Color((int)components[0]);
+ sMsg += "\nInterpretating as single-integer RGB";
+ break;
+ case 3: //RGB
+ cGuess = new Color(components[0],components[1],components[2]);
+ sMsg += "\nInterpretating as RGB";
+ break;
+ case 4: //CMYK
+ //do a rough conversion to RGB as I'm not getting the CMYK to work.
+ //http://www.codeproject.com/KB/applications/xcmyk.aspx
+ float R, G, B, K;
+ K = components[3];
+
+ R = components[0] * (1f - K) + K;
+ G = components[1] * (1f - K) + K;
+ B = components[2] * (1f - K) + K;
+
+ R = (1f - R);
+ G = (1f - G);
+ B = (1f - B);
+
+ cGuess = new Color( R,G,B );
+ sMsg += "\nInterpretating as CMYK";
+ break;
+ default:
+
+ sMsg += "\nUnable to guess using " + components.length + " components; using black instead";
+ cGuess = Color.BLACK;
+ }
+ }
+ catch (Exception e2)
+ {
+ sMsg += "\nColor interpolation failed; using black instead\n";
+ sMsg += e2.toString();
+ cGuess = Color.BLACK;
+ }
+ log.warn(sMsg, e);
+ return cGuess;
}
}