summaryrefslogtreecommitdiffstats
path: root/awt/java/awt/color/ICC_ColorSpace.java
diff options
context:
space:
mode:
Diffstat (limited to 'awt/java/awt/color/ICC_ColorSpace.java')
-rw-r--r--awt/java/awt/color/ICC_ColorSpace.java468
1 files changed, 0 insertions, 468 deletions
diff --git a/awt/java/awt/color/ICC_ColorSpace.java b/awt/java/awt/color/ICC_ColorSpace.java
deleted file mode 100644
index 5b4d7e9..0000000
--- a/awt/java/awt/color/ICC_ColorSpace.java
+++ /dev/null
@@ -1,468 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * @author Oleg V. Khaschansky
- * @version $Revision$
- */
-package java.awt.color;
-
-import org.apache.harmony.awt.gl.color.ColorConverter;
-import org.apache.harmony.awt.gl.color.ColorScaler;
-import org.apache.harmony.awt.gl.color.ICC_Transform;
-import org.apache.harmony.awt.internal.nls.Messages;
-
-import java.io.*;
-
-/**
- * This class implements the abstract class ColorSpace and represents device
- * independent and device dependent color spaces. This color space is based on
- * the International Color Consortium Specification (ICC) File Format for Color
- * Profiles: <a href="http://www.color.org">http://www.color.org</a>
- *
- * @since Android 1.0
- */
-public class ICC_ColorSpace extends ColorSpace {
-
- /**
- * The Constant serialVersionUID.
- */
- private static final long serialVersionUID = 3455889114070431483L;
-
- // Need to keep compatibility with serialized form
- /**
- * The Constant serialPersistentFields.
- */
- private static final ObjectStreamField[]
- serialPersistentFields = {
- new ObjectStreamField("thisProfile", ICC_Profile.class), //$NON-NLS-1$
- new ObjectStreamField("minVal", float[].class), //$NON-NLS-1$
- new ObjectStreamField("maxVal", float[].class), //$NON-NLS-1$
- new ObjectStreamField("diffMinMax", float[].class), //$NON-NLS-1$
- new ObjectStreamField("invDiffMinMax", float[].class), //$NON-NLS-1$
- new ObjectStreamField("needScaleInit", Boolean.TYPE) //$NON-NLS-1$
- };
-
-
- /**
- * According to ICC specification (from http://www.color.org) "For the
- * CIEXYZ encoding, each component (X, Y, and Z) is encoded as a
- * u1Fixed15Number". This means that max value for this encoding is 1 +
- * (32767/32768)
- */
- private static final float MAX_XYZ = 1f + (32767f/32768f);
-
- /**
- * The Constant MAX_SHORT.
- */
- private static final float MAX_SHORT = 65535f;
-
- /**
- * The Constant INV_MAX_SHORT.
- */
- private static final float INV_MAX_SHORT = 1f/MAX_SHORT;
-
- /**
- * The Constant SHORT2XYZ_FACTOR.
- */
- private static final float SHORT2XYZ_FACTOR = MAX_XYZ/MAX_SHORT;
-
- /**
- * The Constant XYZ2SHORT_FACTOR.
- */
- private static final float XYZ2SHORT_FACTOR = MAX_SHORT/MAX_XYZ;
-
- /**
- * The profile.
- */
- private ICC_Profile profile = null;
-
- /**
- * The min values.
- */
- private float minValues[] = null;
-
- /**
- * The max values.
- */
- private float maxValues[] = null;
-
- // cache transforms here - performance gain
- /**
- * The to rgb transform.
- */
- private ICC_Transform toRGBTransform = null;
-
- /**
- * The from rgb transform.
- */
- private ICC_Transform fromRGBTransform = null;
-
- /**
- * The to xyz transform.
- */
- private ICC_Transform toXYZTransform = null;
-
- /**
- * The from xyz transform.
- */
- private ICC_Transform fromXYZTransform = null;
-
- /**
- * The converter.
- */
- private final ColorConverter converter = new ColorConverter();
-
- /**
- * The scaler.
- */
- private final ColorScaler scaler = new ColorScaler();
-
- /**
- * The scaling data loaded.
- */
- private boolean scalingDataLoaded = false;
-
- /**
- * The resolved deserialized inst.
- */
- private ICC_ColorSpace resolvedDeserializedInst;
-
- /**
- * Instantiates a new ICC color space from an ICC_Profile object.
- *
- * @param pf
- * the ICC_Profile object.
- */
- public ICC_ColorSpace(ICC_Profile pf) {
- super(pf.getColorSpaceType(), pf.getNumComponents());
-
- int pfClass = pf.getProfileClass();
-
- switch (pfClass) {
- case ICC_Profile.CLASS_COLORSPACECONVERSION:
- case ICC_Profile.CLASS_DISPLAY:
- case ICC_Profile.CLASS_OUTPUT:
- case ICC_Profile.CLASS_INPUT:
- break; // OK, it is color conversion profile
- default:
- // awt.168=Invalid profile class.
- throw new IllegalArgumentException(Messages.getString("awt.168")); //$NON-NLS-1$
- }
-
- profile = pf;
- fillMinMaxValues();
- }
-
- /**
- * Gets the ICC_Profile for this ICC_ColorSpace.
- *
- * @return the ICC_Profile for this ICC_ColorSpace.
- */
- public ICC_Profile getProfile() {
- if (profile instanceof ICC_ProfileStub) {
- profile = ((ICC_ProfileStub) profile).loadProfile();
- }
-
- return profile;
- }
-
- /**
- * Performs the transformation of a color from this ColorSpace into the RGB
- * color space.
- *
- * @param colorvalue
- * the color value in this ColorSpace.
- * @return the float array with color components in the RGB color space.
- */
- @Override
- public float[] toRGB(float[] colorvalue) {
- if (toRGBTransform == null) {
- ICC_Profile sRGBProfile =
- ((ICC_ColorSpace) ColorSpace.getInstance(CS_sRGB)).getProfile();
- ICC_Profile[] profiles = {getProfile(), sRGBProfile};
- toRGBTransform = new ICC_Transform(profiles);
- if (!scalingDataLoaded) {
- scaler.loadScalingData(this);
- scalingDataLoaded = true;
- }
- }
-
- short[] data = new short[getNumComponents()];
-
- scaler.scale(colorvalue, data, 0);
-
- short[] converted =
- converter.translateColor(toRGBTransform, data, null);
-
- // unscale to sRGB
- float[] res = new float[3];
-
- res[0] = ((converted[0] & 0xFFFF)) * INV_MAX_SHORT;
- res[1] = ((converted[1] & 0xFFFF)) * INV_MAX_SHORT;
- res[2] = ((converted[2] & 0xFFFF)) * INV_MAX_SHORT;
-
- return res;
- }
-
- /**
- * Performs the transformation of a color from this ColorSpace into the
- * CS_CIEXYZ color space.
- *
- * @param colorvalue
- * the color value in this ColorSpace.
- * @return the float array with color components in the CS_CIEXYZ color
- * space.
- */
- @Override
- public float[] toCIEXYZ(float[] colorvalue) {
- if (toXYZTransform == null) {
- ICC_Profile xyzProfile =
- ((ICC_ColorSpace) ColorSpace.getInstance(CS_CIEXYZ)).getProfile();
- ICC_Profile[] profiles = {getProfile(), xyzProfile};
- try {
- int[] intents = {
- ICC_Profile.icRelativeColorimetric,
- ICC_Profile.icPerceptual};
- toXYZTransform = new ICC_Transform(profiles, intents);
- } catch (CMMException e) { // No such tag, use what we can
- toXYZTransform = new ICC_Transform(profiles);
- }
-
- if (!scalingDataLoaded) {
- scaler.loadScalingData(this);
- scalingDataLoaded = true;
- }
- }
-
- short[] data = new short[getNumComponents()];
-
- scaler.scale(colorvalue, data, 0);
-
- short[] converted =
- converter.translateColor(toXYZTransform, data, null);
-
- // unscale to XYZ
- float[] res = new float[3];
-
- res[0] = ((converted[0] & 0xFFFF)) * SHORT2XYZ_FACTOR;
- res[1] = ((converted[1] & 0xFFFF)) * SHORT2XYZ_FACTOR;
- res[2] = ((converted[2] & 0xFFFF)) * SHORT2XYZ_FACTOR;
-
- return res;
- }
-
- /**
- * Performs the transformation of a color from the RGB color space into this
- * ColorSpace.
- *
- * @param rgbvalue
- * the float array representing a color in the RGB color space.
- * @return the float array with the transformed color components.
- */
- @Override
- public float[] fromRGB(float[] rgbvalue) {
- if (fromRGBTransform == null) {
- ICC_Profile sRGBProfile =
- ((ICC_ColorSpace) ColorSpace.getInstance(CS_sRGB)).getProfile();
- ICC_Profile[] profiles = {sRGBProfile, getProfile()};
- fromRGBTransform = new ICC_Transform(profiles);
- if (!scalingDataLoaded) {
- scaler.loadScalingData(this);
- scalingDataLoaded = true;
- }
- }
-
- // scale rgb value to short
- short[] scaledRGBValue = new short[3];
- scaledRGBValue[0] = (short)(rgbvalue[0] * MAX_SHORT + 0.5f);
- scaledRGBValue[1] = (short)(rgbvalue[1] * MAX_SHORT + 0.5f);
- scaledRGBValue[2] = (short)(rgbvalue[2] * MAX_SHORT + 0.5f);
-
- short[] converted =
- converter.translateColor(fromRGBTransform, scaledRGBValue, null);
-
- float[] res = new float[getNumComponents()];
-
- scaler.unscale(res, converted, 0);
-
- return res;
- }
-
- /**
- * Performs the transformation of a color from the CS_CIEXYZ color space
- * into this ColorSpace.
- *
- * @param xyzvalue
- * the float array representing a color in the CS_CIEXYZ color
- * space.
- * @return the float array with the transformed color components.
- */
- @Override
- public float[] fromCIEXYZ(float[] xyzvalue) {
- if (fromXYZTransform == null) {
- ICC_Profile xyzProfile =
- ((ICC_ColorSpace) ColorSpace.getInstance(CS_CIEXYZ)).getProfile();
- ICC_Profile[] profiles = {xyzProfile, getProfile()};
- try {
- int[] intents = {
- ICC_Profile.icPerceptual,
- ICC_Profile.icRelativeColorimetric};
- fromXYZTransform = new ICC_Transform(profiles, intents);
- } catch (CMMException e) { // No such tag, use what we can
- fromXYZTransform = new ICC_Transform(profiles);
- }
-
- if (!scalingDataLoaded) {
- scaler.loadScalingData(this);
- scalingDataLoaded = true;
- }
-
- }
-
- // scale xyz value to short
- short[] scaledXYZValue = new short[3];
- scaledXYZValue[0] = (short)(xyzvalue[0] * XYZ2SHORT_FACTOR + 0.5f);
- scaledXYZValue[1] = (short)(xyzvalue[1] * XYZ2SHORT_FACTOR + 0.5f);
- scaledXYZValue[2] = (short)(xyzvalue[2] * XYZ2SHORT_FACTOR + 0.5f);
-
- short[] converted =
- converter.translateColor(fromXYZTransform, scaledXYZValue, null);
-
- float[] res = new float[getNumComponents()];
-
- scaler.unscale(res, converted, 0);
-
- return res;
- }
-
- /**
- * Gets the minimum normalized color component value for the specified
- * component.
- *
- * @param component
- * the component to determine the minimum value.
- * @return the minimum normalized value of the component.
- */
- @Override
- public float getMinValue(int component) {
- if ((component < 0) || (component > this.getNumComponents() - 1)) {
- // awt.169=Component index out of range
- throw new IllegalArgumentException(Messages.getString("awt.169")); //$NON-NLS-1$
- }
-
- return minValues[component];
- }
-
- /**
- * Gets the maximum normalized color component value for the specified
- * component.
- *
- * @param component
- * the component to determine the maximum value.
- * @return the maximum normalized value of the component.
- */
- @Override
- public float getMaxValue(int component) {
- if ((component < 0) || (component > this.getNumComponents() - 1)) {
- // awt.169=Component index out of range
- throw new IllegalArgumentException(Messages.getString("awt.169")); //$NON-NLS-1$
- }
-
- return maxValues[component];
- }
-
- /**
- * Fill min max values.
- */
- private void fillMinMaxValues() {
- int n = getNumComponents();
- maxValues = new float[n];
- minValues = new float[n];
- switch (getType()) {
- case ColorSpace.TYPE_XYZ:
- minValues[0] = 0;
- minValues[1] = 0;
- minValues[2] = 0;
- maxValues[0] = MAX_XYZ;
- maxValues[1] = MAX_XYZ;
- maxValues[2] = MAX_XYZ;
- break;
- case ColorSpace.TYPE_Lab:
- minValues[0] = 0;
- minValues[1] = -128;
- minValues[2] = -128;
- maxValues[0] = 100;
- maxValues[1] = 127;
- maxValues[2] = 127;
- break;
- default:
- for(int i=0; i<n; i++) {
- minValues[i] = 0;
- maxValues[i] = 1;
- }
- }
- }
-
- /**
- * Write object.
- *
- * @param out
- * the out
- * @throws IOException
- * Signals that an I/O exception has occurred.
- */
- private void writeObject(ObjectOutputStream out) throws IOException {
- ObjectOutputStream.PutField fields = out.putFields();
-
- fields.put("thisProfile", profile); //$NON-NLS-1$
- fields.put("minVal", null); //$NON-NLS-1$
- fields.put("maxVal", null); //$NON-NLS-1$
- fields.put("diffMinMax", null); //$NON-NLS-1$
- fields.put("invDiffMinMax", null); //$NON-NLS-1$
- fields.put("needScaleInit", true); //$NON-NLS-1$
-
- out.writeFields();
- }
-
- /**
- * Read object.
- *
- * @param in
- * the in
- * @throws IOException
- * Signals that an I/O exception has occurred.
- * @throws ClassNotFoundException
- * the class not found exception
- */
- private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {
- ObjectInputStream.GetField fields = in.readFields();
- resolvedDeserializedInst =
- new ICC_ColorSpace((ICC_Profile) fields.get("thisProfile", null)); //$NON-NLS-1$
- }
-
- /**
- * Read resolve.
- *
- * @return the object
- * @throws ObjectStreamException
- * the object stream exception
- */
- Object readResolve() throws ObjectStreamException {
- return resolvedDeserializedInst;
- }
-}
-