001: /*
002: * Copyright (c) 2007, intarsys consulting GmbH
003: *
004: * Redistribution and use in source and binary forms, with or without
005: * modification, are permitted provided that the following conditions are met:
006: *
007: * - Redistributions of source code must retain the above copyright notice,
008: * this list of conditions and the following disclaimer.
009: *
010: * - 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: *
014: * - Neither the name of intarsys nor the names of its contributors may be used
015: * to endorse or promote products derived from this software without specific
016: * prior written permission.
017: *
018: * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
019: * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
020: * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
021: * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
022: * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
023: * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
024: * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
025: * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
026: * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
027: * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
028: * POSSIBILITY OF SUCH DAMAGE.
029: */
030: package de.intarsys.pdf.pd;
031:
032: import de.intarsys.pdf.cos.COSArray;
033: import de.intarsys.pdf.cos.COSDictionary;
034: import de.intarsys.pdf.cos.COSName;
035: import de.intarsys.pdf.cos.COSNumber;
036: import de.intarsys.pdf.cos.COSObject;
037:
038: /**
039: * Support for lab color space.
040: */
041: public class PDCSLab extends PDCSCIEBased {
042: /**
043: * The meta class implementation
044: */
045: static public class MetaClass extends PDCSCIEBased.MetaClass {
046: protected MetaClass(Class instanceClass) {
047: super (instanceClass);
048: }
049: }
050:
051: private static final float[] BlackPointDefault = new float[] {
052: 0.0f, 0.0f, 0.0f };
053:
054: public static final COSName DK_BlackPoint = COSName
055: .constant("BlackPoint"); //$NON-NLS-1$
056:
057: public static final COSName DK_Range = COSName.constant("Range"); //$NON-NLS-1$
058:
059: public static final COSName DK_WhitePoint = COSName
060: .constant("WhitePoint"); //$NON-NLS-1$
061:
062: /** The meta class instance */
063: static public final MetaClass META = new MetaClass(MetaClass.class
064: .getDeclaringClass());
065:
066: private static final float[] RangeDefault = new float[] { -100.0f,
067: 100.0f, -100.0f, 100.0f };
068:
069: private float[] blackPoint;
070:
071: private float[] range;
072:
073: private float[] whitePoint;
074:
075: protected PDCSLab(COSObject object) {
076: super (object);
077:
078: COSDictionary dict;
079: COSArray blackPointArray;
080: COSArray rangeArray;
081: COSArray whitePointArray;
082:
083: dict = ((COSArray) object).get(1).asDictionary();
084: // TODO 3 @ehk dict == null ?
085: blackPointArray = dict.get(PDCSLab.DK_BlackPoint).asArray();
086: if (blackPointArray == null) {
087: blackPoint = PDCSLab.BlackPointDefault;
088: } else {
089: blackPoint = new float[3];
090: for (int index = 0; index < blackPoint.length; index++) {
091: blackPoint[index] = ((COSNumber) blackPointArray
092: .get(index)).floatValue();
093: }
094: }
095:
096: rangeArray = dict.get(PDCSLab.DK_Range).asArray();
097: if (rangeArray == null) {
098: range = PDCSLab.RangeDefault;
099: } else {
100: range = new float[4];
101:
102: for (int index = 0; index < 4; index++) {
103: range[index] = ((COSNumber) rangeArray.get(index))
104: .floatValue();
105: }
106: }
107:
108: whitePointArray = dict.get(PDCSLab.DK_WhitePoint).asArray();
109: whitePoint = new float[3];
110: for (int index = 0; index < whitePoint.length; index++) {
111: whitePoint[index] = ((COSNumber) whitePointArray.get(index))
112: .floatValue();
113: }
114: }
115:
116: public float[] getWhitePoint() {
117: return whitePoint;
118: }
119: }
|