001: /**
002: * Copyright (c) 2004, www.pdfbox.org
003: * All rights reserved.
004: *
005: * Redistribution and use in source and binary forms, with or without
006: * modification, are permitted provided that the following conditions are met:
007: *
008: * 1. Redistributions of source code must retain the above copyright notice,
009: * this list of conditions and the following disclaimer.
010: * 2. Redistributions in binary form must reproduce the above copyright notice,
011: * this list of conditions and the following disclaimer in the documentation
012: * and/or other materials provided with the distribution.
013: * 3. Neither the name of pdfbox; nor the names of its
014: * contributors may be used to endorse or promote products derived from this
015: * software without specific prior written permission.
016: *
017: * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
018: * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
019: * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
020: * DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY
021: * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
022: * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
023: * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
024: * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
025: * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
026: * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
027: *
028: * http://www.pdfbox.org
029: *
030: */package org.pdfbox.pdmodel.graphics.color;
031:
032: import org.pdfbox.cos.COSArray;
033: import org.pdfbox.cos.COSBase;
034: import org.pdfbox.cos.COSDictionary;
035: import org.pdfbox.cos.COSFloat;
036: import org.pdfbox.cos.COSName;
037:
038: import org.pdfbox.pdmodel.common.PDMatrix;
039:
040: import java.awt.color.ColorSpace;
041: import java.awt.image.ColorModel;
042:
043: import java.io.IOException;
044:
045: /**
046: * This class represents a Cal RGB color space.
047: *
048: * @author <a href="mailto:ben@benlitchfield.com">Ben Litchfield</a>
049: * @version $Revision: 1.3 $
050: */
051: public class PDCalRGB extends PDColorSpace {
052: /**
053: * The name of this color space.
054: */
055: public static final String NAME = "CalRGB";
056:
057: private COSArray array;
058: private COSDictionary dictionary;
059:
060: /**
061: * Constructor.
062: */
063: public PDCalRGB() {
064: array = new COSArray();
065: dictionary = new COSDictionary();
066: array.add(COSName.getPDFName(NAME));
067: array.add(dictionary);
068: }
069:
070: /**
071: * Constructor with array.
072: *
073: * @param rgb The underlying color space.
074: */
075: public PDCalRGB(COSArray rgb) {
076: array = rgb;
077: dictionary = (COSDictionary) array.getObject(1);
078: }
079:
080: /**
081: * This will get the number of components that this color space is made up of.
082: *
083: * @return The number of components in this color space.
084: *
085: * @throws IOException If there is an error getting the number of color components.
086: */
087: public int getNumberOfComponents() throws IOException {
088: return 3;
089: }
090:
091: /**
092: * This will return the name of the color space.
093: *
094: * @return The name of the color space.
095: */
096: public String getName() {
097: return NAME;
098: }
099:
100: /**
101: * Create a Java colorspace for this colorspace.
102: *
103: * @return A color space that can be used for Java AWT operations.
104: *
105: * @throws IOException If there is an error creating the color space.
106: */
107: public ColorSpace createColorSpace() throws IOException {
108: throw new IOException("Not implemented");
109: }
110:
111: /**
112: * Create a Java color model for this colorspace.
113: *
114: * @param bpc The number of bits per component.
115: *
116: * @return A color model that can be used for Java AWT operations.
117: *
118: * @throws IOException If there is an error creating the color model.
119: */
120: public ColorModel createColorModel(int bpc) throws IOException {
121: throw new IOException("Not implemented");
122: }
123:
124: /**
125: * Convert this standard java object to a COS object.
126: *
127: * @return The cos object that matches this Java object.
128: */
129: public COSBase getCOSObject() {
130: return array;
131: }
132:
133: /**
134: * This will return the whitepoint tristimulus. As this is a required field
135: * this will never return null. A default of 1,1,1 will be returned if the
136: * pdf does not have any values yet.
137: *
138: * @return The whitepoint tristimulus.
139: */
140: public PDTristimulus getWhitepoint() {
141: COSArray wp = (COSArray) dictionary.getDictionaryObject(COSName
142: .getPDFName("WhitePoint"));
143: if (wp == null) {
144: wp = new COSArray();
145: wp.add(new COSFloat(1.0f));
146: wp.add(new COSFloat(1.0f));
147: wp.add(new COSFloat(1.0f));
148: dictionary.setItem(COSName.getPDFName("WhitePoint"), wp);
149: }
150: return new PDTristimulus(wp);
151: }
152:
153: /**
154: * This will set the whitepoint tristimulus. As this is a required field
155: * this null should not be passed into this function.
156: *
157: * @param wp The whitepoint tristimulus.
158: */
159: public void setWhitepoint(PDTristimulus wp) {
160: COSBase wpArray = wp.getCOSObject();
161: if (wpArray != null) {
162: dictionary.setItem(COSName.getPDFName("WhitePoint"),
163: wpArray);
164: }
165: }
166:
167: /**
168: * This will return the BlackPoint tristimulus. This is an optional field but
169: * has defaults so this will never return null.
170: * A default of 0,0,0 will be returned if the pdf does not have any values yet.
171: *
172: * @return The blackpoint tristimulus.
173: */
174: public PDTristimulus getBlackPoint() {
175: COSArray bp = (COSArray) dictionary.getDictionaryObject(COSName
176: .getPDFName("BlackPoint"));
177: if (bp == null) {
178: bp = new COSArray();
179: bp.add(new COSFloat(0.0f));
180: bp.add(new COSFloat(0.0f));
181: bp.add(new COSFloat(0.0f));
182: dictionary.setItem(COSName.getPDFName("BlackPoint"), bp);
183: }
184: return new PDTristimulus(bp);
185: }
186:
187: /**
188: * This will set the BlackPoint tristimulus. As this is a required field
189: * this null should not be passed into this function.
190: *
191: * @param bp The BlackPoint tristimulus.
192: */
193: public void setBlackPoint(PDTristimulus bp) {
194:
195: COSBase bpArray = null;
196: if (bp != null) {
197: bpArray = bp.getCOSObject();
198: }
199: dictionary.setItem(COSName.getPDFName("BlackPoint"), bpArray);
200: }
201:
202: /**
203: * This will get the gamma value. If none is present then the default of 1,1,1
204: * will be returned.
205: *
206: * @return The gamma value.
207: */
208: public PDGamma getGamma() {
209: COSArray gamma = (COSArray) dictionary
210: .getDictionaryObject(COSName.getPDFName("Gamma"));
211: if (gamma == null) {
212: gamma = new COSArray();
213: gamma.add(new COSFloat(1.0f));
214: gamma.add(new COSFloat(1.0f));
215: gamma.add(new COSFloat(1.0f));
216: dictionary.setItem(COSName.getPDFName("Gamma"), gamma);
217: }
218: return new PDGamma(gamma);
219: }
220:
221: /**
222: * Set the gamma value.
223: *
224: * @param value The new gamma value.
225: */
226: public void setGamma(PDGamma value) {
227: COSArray gamma = null;
228: if (value != null) {
229: gamma = value.getCOSArray();
230: }
231: dictionary.setItem(COSName.getPDFName("Gamma"), gamma);
232: }
233:
234: /**
235: * This will get the linear interpretation array. This is guaranteed to not
236: * return null. If the underlying dictionary contains null then the identity
237: * matrix will be returned.
238: *
239: * @return The linear interpretation matrix.
240: */
241: public PDMatrix getLinearInterpretation() {
242: PDMatrix retval = null;
243: COSArray matrix = (COSArray) dictionary
244: .getDictionaryObject(COSName.getPDFName("Matrix"));
245: if (matrix == null) {
246: retval = new PDMatrix();
247: setLinearInterpretation(retval);
248: } else {
249: retval = new PDMatrix(matrix);
250: }
251: return retval;
252: }
253:
254: /**
255: * This will set the linear interpretation matrix. Passing in null will
256: * clear the matrix.
257: *
258: * @param matrix The new linear interpretation matrix.
259: */
260: public void setLinearInterpretation(PDMatrix matrix) {
261: COSArray matrixArray = null;
262: if (matrix != null) {
263: matrixArray = matrix.getCOSArray();
264: }
265: dictionary.setItem(COSName.getPDFName("Matrix"), matrixArray);
266: }
267: }
|