/* | 
|
 * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved. | 
|
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. | 
|
 * | 
|
 * This code 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.  Oracle designates this | 
|
 * particular file as subject to the "Classpath" exception as provided | 
|
 * by Oracle in the LICENSE file that accompanied this code. | 
|
 * | 
|
 * This code 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 in the LICENSE file that | 
|
 * accompanied this code). | 
|
 * | 
|
 * 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA | 
|
 * or visit www.oracle.com if you need additional information or have any | 
|
 * questions. | 
|
*/  | 
|
package com.sun.imageio.plugins.common;  | 
|
import java.awt.color.ColorSpace;  | 
|
/** | 
|
 * A dummy <code>ColorSpace</code> to enable <code>ColorModel</code> | 
|
 * for image data which do not have an innate color representation. | 
|
*/  | 
|
public class BogusColorSpace extends ColorSpace {  | 
|
    /** | 
|
     * Return the type given the number of components. | 
|
     * | 
|
     * @param numComponents The number of components in the | 
|
     * <code>ColorSpace</code>. | 
|
     * @exception IllegalArgumentException if <code>numComponents</code> | 
|
     * is less than 1. | 
|
*/  | 
|
    private static int getType(int numComponents) { | 
|
if(numComponents < 1) {  | 
|
throw new IllegalArgumentException("numComponents < 1!");  | 
|
}  | 
|
int type;  | 
|
switch(numComponents) {  | 
|
case 1:  | 
|
type = ColorSpace.TYPE_GRAY;  | 
|
break;  | 
|
default:  | 
|
// Based on the constant definitions TYPE_2CLR=12 through  | 
|
// TYPE_FCLR=25. This will return unknown types for  | 
|
            // numComponents > 15. | 
|
type = numComponents + 10;  | 
|
}  | 
|
return type;  | 
|
}  | 
|
    /** | 
|
     * Constructs a bogus <code>ColorSpace</code>. | 
|
     * | 
|
     * @param numComponents The number of components in the | 
|
     * <code>ColorSpace</code>. | 
|
     * @exception IllegalArgumentException if <code>numComponents</code> | 
|
     * is less than 1. | 
|
*/  | 
|
    public BogusColorSpace(int numComponents) { | 
|
super(getType(numComponents), numComponents);  | 
|
}  | 
|
//  | 
|
// The following methods simply copy the input array to the  | 
|
// output array while otherwise attempting to adhere to the  | 
|
// specified behavior of the methods vis-a-vis exceptions.  | 
|
//  | 
|
    public float[] toRGB(float[] colorvalue) { | 
|
if(colorvalue.length < getNumComponents()) {  | 
|
throw new ArrayIndexOutOfBoundsException  | 
|
                ("colorvalue.length < getNumComponents()"); | 
|
}  | 
|
float[] rgbvalue = new float[3];  | 
|
System.arraycopy(colorvalue, 0, rgbvalue, 0,  | 
|
Math.min(3, getNumComponents()));  | 
|
return colorvalue;  | 
|
}  | 
|
    public float[] fromRGB(float[] rgbvalue) { | 
|
if(rgbvalue.length < 3) {  | 
|
throw new ArrayIndexOutOfBoundsException  | 
|
                ("rgbvalue.length < 3"); | 
|
}  | 
|
float[] colorvalue = new float[getNumComponents()];  | 
|
System.arraycopy(rgbvalue, 0, colorvalue, 0,  | 
|
Math.min(3, colorvalue.length));  | 
|
return rgbvalue;  | 
|
}  | 
|
    public float[] toCIEXYZ(float[] colorvalue) { | 
|
if(colorvalue.length < getNumComponents()) {  | 
|
throw new ArrayIndexOutOfBoundsException  | 
|
                ("colorvalue.length < getNumComponents()"); | 
|
}  | 
|
float[] xyzvalue = new float[3];  | 
|
System.arraycopy(colorvalue, 0, xyzvalue, 0,  | 
|
Math.min(3, getNumComponents()));  | 
|
return colorvalue;  | 
|
}  | 
|
    public float[] fromCIEXYZ(float[] xyzvalue) { | 
|
if(xyzvalue.length < 3) {  | 
|
throw new ArrayIndexOutOfBoundsException  | 
|
                ("xyzvalue.length < 3"); | 
|
}  | 
|
float[] colorvalue = new float[getNumComponents()];  | 
|
System.arraycopy(xyzvalue, 0, colorvalue, 0,  | 
|
Math.min(3, colorvalue.length));  | 
|
return xyzvalue;  | 
|
}  | 
|
}  |