001: /*
002: * $Id: CalGrayColor.java,v 1.2 2007/12/20 18:33:34 rbair Exp $
003: *
004: * Copyright 2004 Sun Microsystems, Inc., 4150 Network Circle,
005: * Santa Clara, California 95054, U.S.A. All rights reserved.
006: *
007: * This library is free software; you can redistribute it and/or
008: * modify it under the terms of the GNU Lesser General Public
009: * License as published by the Free Software Foundation; either
010: * version 2.1 of the License, or (at your option) any later version.
011: *
012: * This library is distributed in the hope that it will be useful,
013: * but WITHOUT ANY WARRANTY; without even the implied warranty of
014: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
015: * Lesser General Public License for more details.
016: *
017: * You should have received a copy of the GNU Lesser General Public
018: * License along with this library; if not, write to the Free Software
019: * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
020: */
021:
022: package com.sun.pdfview.colorspace;
023:
024: import java.awt.color.ColorSpace;
025: import java.io.IOException;
026:
027: import com.sun.pdfview.PDFObject;
028:
029: /**
030: * A ColorSpace for calibrated gray
031: * @author Mike Wessler
032: */
033: public class CalGrayColor extends ColorSpace {
034: float white[] = { 1f, 1f, 1f };
035: float black[] = { 0, 0, 0 };
036: float gamma = 1;
037: static ColorSpace cie = ColorSpace.getInstance(ColorSpace.CS_sRGB);
038:
039: /**
040: * Create a new Calibrated Gray color space object, given
041: * the description in a PDF dictionary.
042: * @param obj a dictionary that contains an Array of 3 Numbers
043: * for "WhitePoint" and "BlackPoint", and a Number for "Gamma"
044: */
045: public CalGrayColor(PDFObject obj) throws IOException {
046: // obj is a dictionary that has the following parts:
047: // WhitePoint [a b c]
048: // BlackPoint [a b c]
049: // Gamma a
050: super (TYPE_GRAY, 1);
051: PDFObject ary = obj.getDictRef("WhitePoint");
052: if (ary != null) {
053: for (int i = 0; i < 3; i++) {
054: white[i] = ary.getAt(i).getFloatValue();
055: }
056: }
057: ary = obj.getDictRef("BlackPoint");
058: if (ary != null) {
059: for (int i = 0; i < 3; i++) {
060: black[i] = ary.getAt(i).getFloatValue();
061: }
062: }
063: PDFObject g = obj.getDictRef("Gamma");
064: if (g != null) {
065: gamma = g.getFloatValue();
066: }
067: }
068:
069: /**
070: * Create a new calibrated gray color space object, with the
071: * default values for black point, white point and gamma
072: */
073: public CalGrayColor() {
074: super (TYPE_GRAY, 1);
075: }
076:
077: /**
078: * get the number of components (1).
079: */
080: @Override
081: public int getNumComponents() {
082: return 1;
083: }
084:
085: /**
086: * convert from Calibrated Gray to RGB.
087: * @param comp the gray value (0-1)
088: * @return the RGB values (0-1)
089: */
090: public float[] toRGB(float comp[]) {
091: if (comp.length == 1) {
092: float mul = (float) Math.pow(comp[0], gamma);
093: float xyz[] = { white[0] * mul, 0, 0 };
094: float rgb[] = cie.fromCIEXYZ(xyz);
095: return rgb;
096: } else {
097: return black;
098: }
099: }
100:
101: /**
102: * convert from RGB to Calibrated Gray. NOT IMPLEMENTED
103: */
104: public float[] fromRGB(float[] rgbvalue) {
105: return new float[1];
106: }
107:
108: /**
109: * convert from CIEXYZ to Calibrated Gray. NOT IMPLEMENTED
110: */
111: public float[] fromCIEXYZ(float[] colorvalue) {
112: return new float[1];
113: }
114:
115: /**
116: * get the type of this ColorSpace (TYPE_GRAY)
117: */
118: @Override
119: public int getType() {
120: return TYPE_GRAY;
121: }
122:
123: /**
124: * convert from Calibrated Gray to CIEXYZ. NOT IMPLEMENTED
125: */
126: public float[] toCIEXYZ(float[] colorvalue) {
127: return new float[3];
128: }
129:
130: }
|