/* * @(#)ColorSpace.java 1.8 06/10/10 * * Copyright 1990-2008 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License version * 2 only, as published by the Free Software Foundation. * * This program 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 * General Public License version 2 for more details (a copy is * included at /legal/license.txt). * * You should have received a copy of the GNU General Public License * version 2 along with this work; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA * * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa * Clara, CA 95054 or visit www.sun.com if you need additional * information or have any questions. * */ package java.awt.color; public abstract class ColorSpace implements java.io.Serializable { static final long serialVersionUID = -409452704308689724L; private int type; private int numComponents; // Cache of singletons for the predefined color spaces. private static ColorSpace sRGBspace; /** * Any of the family of RGB color spaces. */ public static final int TYPE_RGB = 5; /** * The sRGB color space defined at * <A href="http://www.w3.org/pub/WWW/Graphics/Color/sRGB.html"> * http://www.w3.org/pub/WWW/Graphics/Color/sRGB.html * </A>. */ public static final int CS_sRGB = 1000; /** * Constructs a ColorSpace object given a color space type * and the number of components. * @param type One of the <CODE>ColorSpace</CODE> type constants. * @param numcomponents The number of components in the color space. */ protected ColorSpace (int type, int numcomponents) { this.type = type; this.numComponents = numcomponents; } /** * Returns a ColorSpace representing one of the specific * predefined color spaces. * @param colorspace a specific color space identified by one of * the predefined class constants (e.g. CS_sRGB, CS_LINEAR_RGB, * CS_CIEXYZ, CS_GRAY, or CS_PYCC) * @return The requested <CODE>ColorSpace</CODE> object. */ // NOTE: This method may be called by privileged threads. // DO NOT INVOKE CLIENT CODE ON THIS THREAD! public static ColorSpace getInstance(int colorspace) { ColorSpace theColorSpace; switch (colorspace) { case CS_sRGB: if (sRGBspace == null) { sRGBspace = new RGBColorSpace(); } theColorSpace = sRGBspace; break; default: throw new IllegalArgumentException ("Unknown color space"); } return theColorSpace; } /** * Returns the name of the component given the component index. * @param idx The component index. * @return The name of the component at the specified index. */ public String getName(int idx) { /* TODO - handle common cases here */ return new String("Unnamed color component(" + idx + ")"); } /** * Returns the number of components of this ColorSpace. * @return The number of components in this <CODE>ColorSpace</CODE>. */ public int getNumComponents() { return numComponents; } /** * Returns the color space type of this ColorSpace (for example * TYPE_RGB, TYPE_XYZ, ...). The type defines the * number of components of the color space and the interpretation, * e.g. TYPE_RGB identifies a color space with three components - red, * green, and blue. It does not define the particular color * characteristics of the space, e.g. the chromaticities of the * primaries. * @return The type constant that represents the type of this * <CODE>ColorSpace</CODE>. */ public int getType() { return type; } /** * Returns true if the ColorSpace is CS_sRGB. * @return <CODE>true</CODE> if this is a <CODE>CS_sRGB</CODE> color * space, <code>false</code> if it is not. */ public boolean isCS_sRGB() { /* NOTE - make sure we know sRGBspace exists already */ return (this == sRGBspace); } } class RGBColorSpace extends ColorSpace { public RGBColorSpace() { super(TYPE_RGB, 3); } }