/*
* $Id: CMYKColorSpace.java,v 1.2 2007-12-20 18:33:34 rbair Exp $
*
* Copyright 2004 Sun Microsystems, Inc., 4150 Network Circle,
* Santa Clara, California 95054, U.S.A. All rights reserved.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
package com.sun.pdfview.colorspace;
import java.awt.color.ColorSpace;
/**
* A ColorSpace for the CMYK color space.
*
* @author Mike Wessler
*/
public class CMYKColorSpace extends ColorSpace {
private final ColorSpace csRgb = ColorSpace.getInstance(ColorSpace.CS_sRGB);
/**
* create a new CMYK color space: a ColorSpace with 4 components
*/
public CMYKColorSpace() {
super(TYPE_CMYK, 4);
}
/**
* Convert from CIEXYZ to RGB.
*/
public float[] fromCIEXYZ(float[] colorvalue) {
return fromRGB(csRgb.fromCIEXYZ(colorvalue));
}
/**
* Convert from RGB to CMYK.
* @param rgbvalue the red, green, and blue values (0-1)
* @return the CMYK values (0-1)
*/
public float[] fromRGB(float[] rgbvalue) {
float color[]= new float[4];
float c= 1-rgbvalue[0];
float m= 1-rgbvalue[1];
float y= 1-rgbvalue[2];
float k= Math.min(c, Math.min(m, y));
float ik= 1-k;
if (ik==0) {
c= 1;
m= 1;
y= 1;
} else {
c= (c-k)/ik;
m= (m-k)/ik;
y= (y-k)/ik;
}
color[0]= c;
color[1]= m;
color[2]= y;
color[3]= k;
return color;
}
/**
* the number of components
*/
@Override public int getNumComponents() {
return 4;
}
/**
* the name of this color space
*/
@Override public String getName(int idx) {
return "CMYK";
}
/**
* the type of this color space (TYPE_CMYK)
*/
@Override public int getType() {
return TYPE_CMYK;
}
/**
* Convert from CMYK to CIEXYZ.
*/
public float[] toCIEXYZ(float[] colorvalue) {
return csRgb.toCIEXYZ(toRGB(colorvalue));
}
/**
* Convert from CMYK to RGB.
* @param colorvalue the CMYK values (0-1)
* @return the RGB values (0-1)
*/
public float[] toRGB(float[] colorvalue) {
if (colorvalue.length==4) {
float[] color= new float[3];
float k= colorvalue[3];
float ik= 1-k;
color[0]= (1-(colorvalue[0]*ik+k));
color[1]= (1-(colorvalue[1]*ik+k));
color[2]= (1-(colorvalue[2]*ik+k));
return color;
} else {
return new float[3];
}
}
}