--- a/src/java.desktop/share/classes/java/awt/color/CMMException.java Fri Oct 26 15:44:33 2018 +0530
+++ b/src/java.desktop/share/classes/java/awt/color/CMMException.java Mon Oct 29 17:34:05 2018 -0700
@@ -1,4 +1,5 @@
/*
+ * Copyright (c) 1997, 2018, 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
@@ -22,13 +23,7 @@
* questions.
*/
-/*
- Created by gbp, October 25, 1997
-
- *
- */
-/*
- **********************************************************************
+/* ********************************************************************
**********************************************************************
**********************************************************************
*** COPYRIGHT (c) Eastman Kodak Company, 1997 ***
@@ -38,22 +33,24 @@
**********************************************************************
**********************************************************************/
-
package java.awt.color;
-
/**
* This exception is thrown if the native CMM returns an error.
*/
+public class CMMException extends java.lang.RuntimeException {
-public class CMMException extends java.lang.RuntimeException {
+ /**
+ * Use serialVersionUID from JDK 1.2 for interoperability.
+ */
private static final long serialVersionUID = 5775558044142994965L;
/**
- * Constructs a CMMException with the specified detail message.
- * @param s the specified detail message
+ * Constructs a {@code CMMException} with the specified detail message.
+ *
+ * @param s the specified detail message
*/
- public CMMException (String s) {
- super (s);
+ public CMMException(String s) {
+ super(s);
}
}
--- a/src/java.desktop/share/classes/java/awt/color/ColorSpace.java Fri Oct 26 15:44:33 2018 +0530
+++ b/src/java.desktop/share/classes/java/awt/color/ColorSpace.java Mon Oct 29 17:34:05 2018 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2018, 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
@@ -23,8 +23,7 @@
* questions.
*/
-/*
- **********************************************************************
+/* ********************************************************************
**********************************************************************
**********************************************************************
*** COPYRIGHT (c) Eastman Kodak Company, 1997 ***
@@ -38,63 +37,60 @@
import java.lang.annotation.Native;
-import sun.java2d.cmm.PCMM;
import sun.java2d.cmm.CMSManager;
-
/**
* This abstract class is used to serve as a color space tag to identify the
- * specific color space of a Color object or, via a ColorModel object,
- * of an Image, a BufferedImage, or a GraphicsDevice. It contains
- * methods that transform colors in a specific color space to/from sRGB
- * and to/from a well-defined CIEXYZ color space.
+ * specific color space of a {@code Color} object or, via a {@code ColorModel}
+ * object, of an {@code Image}, a {@code BufferedImage}, or a
+ * {@code GraphicsDevice}. It contains methods that transform colors in a
+ * specific color space to/from sRGB and to/from a well-defined CIEXYZ color
+ * space.
* <p>
- * For purposes of the methods in this class, colors are represented as
- * arrays of color components represented as floats in a normalized range
- * defined by each ColorSpace. For many ColorSpaces (e.g. sRGB), this
- * range is 0.0 to 1.0. However, some ColorSpaces have components whose
- * values have a different range. Methods are provided to inquire per
- * component minimum and maximum normalized values.
+ * For purposes of the methods in this class, colors are represented as arrays
+ * of color components represented as floats in a normalized range defined by
+ * each {@code ColorSpace}. For many {@code ColorSpaces} (e.g. sRGB), this range
+ * is 0.0 to 1.0. However, some {@code ColorSpaces} have components whose values
+ * have a different range. Methods are provided to inquire per component minimum
+ * and maximum normalized values.
* <p>
- * Several variables are defined for purposes of referring to color
- * space types (e.g. TYPE_RGB, TYPE_XYZ, etc.) and to refer to specific
- * color spaces (e.g. CS_sRGB and CS_CIEXYZ).
- * sRGB is a proposed standard RGB color space. For more information,
- * see <A href="http://www.w3.org/pub/WWW/Graphics/Color/sRGB.html">
- * http://www.w3.org/pub/WWW/Graphics/Color/sRGB.html
- * </A>.
+ * Several variables are defined for purposes of referring to color space types
+ * (e.g. {@code TYPE_RGB}, {@code TYPE_XYZ}, etc.) and to refer to specific
+ * color spaces (e.g. {@code CS_sRGB} and {@code CS_CIEXYZ}). sRGB is a proposed
+ * standard RGB color space. For more information, see
+ * <a href="http://www.w3.org/pub/WWW/Graphics/Color/sRGB.html">
+ * http://www.w3.org/pub/WWW/Graphics/Color/sRGB.html</a>.
* <p>
- * The purpose of the methods to transform to/from the well-defined
- * CIEXYZ color space is to support conversions between any two color
- * spaces at a reasonably high degree of accuracy. It is expected that
- * particular implementations of subclasses of ColorSpace (e.g.
- * ICC_ColorSpace) will support high performance conversion based on
- * underlying platform color management systems.
+ * The purpose of the methods to transform to/from the well-defined CIEXYZ color
+ * space is to support conversions between any two color spaces at a reasonably
+ * high degree of accuracy. It is expected that particular implementations of
+ * subclasses of {@code ColorSpace} (e.g. {@code ICC_ColorSpace}) will support
+ * high performance conversion based on underlying platform color management
+ * systems.
* <p>
- * The CS_CIEXYZ space used by the toCIEXYZ/fromCIEXYZ methods can be
- * described as follows:
-<pre>
-
- CIEXYZ
- viewing illuminance: 200 lux
- viewing white point: CIE D50
- media white point: "that of a perfectly reflecting diffuser" -- D50
- media black point: 0 lux or 0 Reflectance
- flare: 1 percent
- surround: 20percent of the media white point
- media description: reflection print (i.e., RLAB, Hunt viewing media)
- note: For developers creating an ICC profile for this conversion
- space, the following is applicable. Use a simple Von Kries
- white point adaptation folded into the 3X3 matrix parameters
- and fold the flare and surround effects into the three
- one-dimensional lookup tables (assuming one uses the minimal
- model for monitors).
-
-</pre>
+ * The {@code CS_CIEXYZ} space used by the {@code toCIEXYZ/fromCIEXYZ} methods
+ * can be described as follows:
+ * <pre>
+ *
+ * CIEXYZ
+ * viewing illuminance: 200 lux
+ * viewing white point: CIE D50
+ * media white point: "that of a perfectly reflecting diffuser" -- D50
+ * media black point: 0 lux or 0 Reflectance
+ * flare: 1 percent
+ * surround: 20percent of the media white point
+ * media description: reflection print (i.e., RLAB, Hunt viewing media)
+ * note: For developers creating an ICC profile for this conversion
+ * space, the following is applicable. Use a simple Von Kries
+ * white point adaptation folded into the 3X3 matrix parameters
+ * and fold the flare and surround effects into the three
+ * one-dimensional lookup tables (assuming one uses the minimal
+ * model for monitors).
+ *
+ * </pre>
*
* @see ICC_ColorSpace
*/
-
public abstract class ColorSpace implements java.io.Serializable {
static final long serialVersionUID = -409452704308689724L;
@@ -237,15 +233,14 @@
/**
* 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>.
+ * <a href="http://www.w3.org/pub/WWW/Graphics/Color/sRGB.html">
+ * http://www.w3.org/pub/WWW/Graphics/Color/sRGB.html</a>.
*/
@Native public static final int CS_sRGB = 1000;
/**
- * A built-in linear RGB color space. This space is based on the
- * same RGB primaries as CS_sRGB, but has a linear tone reproduction curve.
+ * A built-in linear RGB color space. This space is based on the same RGB
+ * primaries as {@code CS_sRGB}, but has a linear tone reproduction curve.
*/
@Native public static final int CS_LINEAR_RGB = 1004;
@@ -264,25 +259,26 @@
*/
@Native public static final int CS_GRAY = 1003;
-
/**
- * Constructs a ColorSpace object given a color space type
- * and the number of components.
- * @param type one of the {@code ColorSpace} type constants
- * @param numcomponents the number of components in the color space
+ * Constructs a {@code ColorSpace} object given a color space type and the
+ * number of components.
+ *
+ * @param type one of the {@code ColorSpace} type constants
+ * @param numcomponents the number of components in the color space
*/
- protected ColorSpace (int type, int numcomponents) {
+ 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)
+ * Returns a {@code 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. {@code CS_sRGB},
+ * {@code CS_LINEAR_RGB}, {@code CS_CIEXYZ}, {@code CS_GRAY}, or
+ * {@code CS_PYCC})
* @return the requested {@code ColorSpace} object
*/
// NOTE: This method may be called by privileged threads.
@@ -363,11 +359,11 @@
return theColorSpace;
}
-
/**
- * Returns true if the ColorSpace is CS_sRGB.
- * @return {@code true} if this is a {@code CS_sRGB} color
- * space, {@code false} if it is not
+ * Returns true if the {@code ColorSpace} is {@code CS_sRGB}.
+ *
+ * @return {@code true} if this is a {@code CS_sRGB} color space,
+ * {@code false} if it is not
*/
public boolean isCS_sRGB () {
/* REMIND - make sure we know sRGBspace exists already */
@@ -375,115 +371,105 @@
}
/**
- * Transforms a color value assumed to be in this ColorSpace
- * into a value in the default CS_sRGB color space.
+ * Transforms a color value assumed to be in this {@code ColorSpace} into a
+ * value in the default {@code CS_sRGB} color space.
* <p>
- * This method transforms color values using algorithms designed
- * to produce the best perceptual match between input and output
- * colors. In order to do colorimetric conversion of color values,
- * you should use the {@code toCIEXYZ}
- * method of this color space to first convert from the input
- * color space to the CS_CIEXYZ color space, and then use the
- * {@code fromCIEXYZ} method of the CS_sRGB color space to
- * convert from CS_CIEXYZ to the output color space.
- * See {@link #toCIEXYZ(float[]) toCIEXYZ} and
+ * This method transforms color values using algorithms designed to produce
+ * the best perceptual match between input and output colors. In order to do
+ * colorimetric conversion of color values, you should use the
+ * {@code toCIEXYZ} method of this color space to first convert from the
+ * input color space to the CS_CIEXYZ color space, and then use the
+ * {@code fromCIEXYZ} method of the {@code CS_sRGB} color space to convert
+ * from {@code CS_CIEXYZ} to the output color space. See
+ * {@link #toCIEXYZ(float[]) toCIEXYZ} and
* {@link #fromCIEXYZ(float[]) fromCIEXYZ} for further information.
*
- * @param colorvalue a float array with length of at least the number
- * of components in this ColorSpace
+ * @param colorvalue a float array with length of at least the number of
+ * components in this {@code ColorSpace}
* @return a float array of length 3
- * @throws ArrayIndexOutOfBoundsException if array length is not
- * at least the number of components in this ColorSpace
+ * @throws ArrayIndexOutOfBoundsException if array length is not at least
+ * the number of components in this {@code ColorSpace}
*/
public abstract float[] toRGB(float[] colorvalue);
-
/**
- * Transforms a color value assumed to be in the default CS_sRGB
- * color space into this ColorSpace.
+ * Transforms a color value assumed to be in the default {@code CS_sRGB}
+ * color space into this {@code ColorSpace}.
* <p>
- * This method transforms color values using algorithms designed
- * to produce the best perceptual match between input and output
- * colors. In order to do colorimetric conversion of color values,
- * you should use the {@code toCIEXYZ}
- * method of the CS_sRGB color space to first convert from the input
- * color space to the CS_CIEXYZ color space, and then use the
- * {@code fromCIEXYZ} method of this color space to
- * convert from CS_CIEXYZ to the output color space.
- * See {@link #toCIEXYZ(float[]) toCIEXYZ} and
+ * This method transforms color values using algorithms designed to produce
+ * the best perceptual match between input and output colors. In order to do
+ * colorimetric conversion of color values, you should use the
+ * {@code toCIEXYZ} method of the {@code CS_sRGB} color space to first
+ * convert from the input color space to the {@code CS_CIEXYZ} color space,
+ * and then use the {@code fromCIEXYZ} method of this color space to convert
+ * from {@code CS_CIEXYZ} to the output color space. See
+ * {@link #toCIEXYZ(float[]) toCIEXYZ} and
* {@link #fromCIEXYZ(float[]) fromCIEXYZ} for further information.
*
- * @param rgbvalue a float array with length of at least 3
- * @return a float array with length equal to the number of
- * components in this ColorSpace
- * @throws ArrayIndexOutOfBoundsException if array length is not
- * at least 3
+ * @param rgbvalue a float array with length of at least 3
+ * @return a float array with length equal to the number of components in
+ * this {@code ColorSpace}
+ * @throws ArrayIndexOutOfBoundsException if array length is not at least 3
*/
public abstract float[] fromRGB(float[] rgbvalue);
-
/**
- * Transforms a color value assumed to be in this ColorSpace
- * into the CS_CIEXYZ conversion color space.
+ * Transforms a color value assumed to be in this {@code ColorSpace} into
+ * the {@code CS_CIEXYZ} conversion color space.
* <p>
- * This method transforms color values using relative colorimetry,
- * as defined by the International Color Consortium standard. This
- * means that the XYZ values returned by this method are represented
- * relative to the D50 white point of the CS_CIEXYZ color space.
- * This representation is useful in a two-step color conversion
- * process in which colors are transformed from an input color
- * space to CS_CIEXYZ and then to an output color space. This
- * representation is not the same as the XYZ values that would
- * be measured from the given color value by a colorimeter.
- * A further transformation is necessary to compute the XYZ values
- * that would be measured using current CIE recommended practices.
- * See the {@link ICC_ColorSpace#toCIEXYZ(float[]) toCIEXYZ} method of
+ * This method transforms color values using relative colorimetry, as
+ * defined by the International Color Consortium standard. This means that
+ * the XYZ values returned by this method are represented relative to the
+ * D50 white point of the {@code CS_CIEXYZ} color space. This representation
+ * is useful in a two-step color conversion process in which colors are
+ * transformed from an input color space to {@code CS_CIEXYZ} and then to an
+ * output color space. This representation is not the same as the XYZ values
+ * that would be measured from the given color value by a colorimeter. A
+ * further transformation is necessary to compute the XYZ values that would
+ * be measured using current CIE recommended practices. See the
+ * {@link ICC_ColorSpace#toCIEXYZ(float[]) toCIEXYZ} method of
* {@code ICC_ColorSpace} for further information.
*
- * @param colorvalue a float array with length of at least the number
- * of components in this ColorSpace
+ * @param colorvalue a float array with length of at least the number of
+ * components in this {@code ColorSpace}
* @return a float array of length 3
- * @throws ArrayIndexOutOfBoundsException if array length is not
- * at least the number of components in this ColorSpace.
+ * @throws ArrayIndexOutOfBoundsException if array length is not at least
+ * the number of components in this {@code ColorSpace}.
*/
public abstract float[] toCIEXYZ(float[] colorvalue);
-
/**
- * Transforms a color value assumed to be in the CS_CIEXYZ conversion
- * color space into this ColorSpace.
+ * Transforms a color value assumed to be in the {@code CS_CIEXYZ}
+ * conversion color space into this {@code ColorSpace}.
* <p>
- * This method transforms color values using relative colorimetry,
- * as defined by the International Color Consortium standard. This
- * means that the XYZ argument values taken by this method are represented
- * relative to the D50 white point of the CS_CIEXYZ color space.
- * This representation is useful in a two-step color conversion
- * process in which colors are transformed from an input color
- * space to CS_CIEXYZ and then to an output color space. The color
- * values returned by this method are not those that would produce
- * the XYZ value passed to the method when measured by a colorimeter.
- * If you have XYZ values corresponding to measurements made using
- * current CIE recommended practices, they must be converted to D50
- * relative values before being passed to this method.
- * See the {@link ICC_ColorSpace#fromCIEXYZ(float[]) fromCIEXYZ} method of
+ * This method transforms color values using relative colorimetry, as
+ * defined by the International Color Consortium standard. This means that
+ * the XYZ argument values taken by this method are represented relative to
+ * the D50 white point of the {@code CS_CIEXYZ} color space. This
+ * representation is useful in a two-step color conversion process in which
+ * colors are transformed from an input color space to {@code CS_CIEXYZ} and
+ * then to an output color space. The color values returned by this method
+ * are not those that would produce the XYZ value passed to the method when
+ * measured by a colorimeter. If you have XYZ values corresponding to
+ * measurements made using current CIE recommended practices, they must be
+ * converted to D50 relative values before being passed to this method. See
+ * the {@link ICC_ColorSpace#fromCIEXYZ(float[]) fromCIEXYZ} method of
* {@code ICC_ColorSpace} for further information.
*
- * @param colorvalue a float array with length of at least 3
- * @return a float array with length equal to the number of
- * components in this ColorSpace
- * @throws ArrayIndexOutOfBoundsException if array length is not
- * at least 3
+ * @param colorvalue a float array with length of at least 3
+ * @return a float array with length equal to the number of components in
+ * this {@code ColorSpace}
+ * @throws ArrayIndexOutOfBoundsException if array length is not at least 3
*/
public abstract float[] fromCIEXYZ(float[] colorvalue);
/**
- * 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.
+ * Returns the color space type of this {@code ColorSpace} (for example
+ * {@code TYPE_RGB}, {@code TYPE_XYZ}, ...). The type defines the number of
+ * components of the color space and the interpretation, e.g.
+ * {@code 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}
@@ -494,7 +480,8 @@
/**
* Returns the number of components of this ColorSpace.
- * @return The number of components in this {@code ColorSpace}.
+ *
+ * @return the number of components in this {@code ColorSpace}
*/
public int getNumComponents() {
return numComponents;
@@ -503,10 +490,10 @@
/**
* Returns the name of the component given the component index.
*
- * @param idx the component index
+ * @param idx the component index
* @return the name of the component at the specified index
- * @throws IllegalArgumentException if {@code idx} is
- * less than 0 or greater than numComponents - 1
+ * @throws IllegalArgumentException if {@code idx} is less than 0 or greater
+ * than {@code numComponents - 1}
*/
public String getName (int idx) {
/* REMIND - handle common cases here */
@@ -564,15 +551,14 @@
}
/**
- * Returns the minimum normalized color component value for the
- * specified component. The default implementation in this abstract
- * class returns 0.0 for all components. Subclasses should override
- * this method if necessary.
+ * Returns the minimum normalized color component value for the specified
+ * component. The default implementation in this abstract class returns 0.0
+ * for all components. Subclasses should override this method if necessary.
*
- * @param component the component index
+ * @param component the component index
* @return the minimum normalized component value
- * @throws IllegalArgumentException if component is less than 0 or
- * greater than numComponents - 1
+ * @throws IllegalArgumentException if component is less than 0 or greater
+ * than {@code numComponents - 1}
* @since 1.4
*/
public float getMinValue(int component) {
@@ -584,15 +570,14 @@
}
/**
- * Returns the maximum normalized color component value for the
- * specified component. The default implementation in this abstract
- * class returns 1.0 for all components. Subclasses should override
- * this method if necessary.
+ * Returns the maximum normalized color component value for the specified
+ * component. The default implementation in this abstract class returns 1.0
+ * for all components. Subclasses should override this method if necessary.
*
- * @param component the component index
+ * @param component the component index
* @return the maximum normalized component value
- * @throws IllegalArgumentException if component is less than 0 or
- * greater than numComponents - 1
+ * @throws IllegalArgumentException if component is less than 0 or greater
+ * than {@code numComponents - 1}
* @since 1.4
*/
public float getMaxValue(int component) {
@@ -603,7 +588,8 @@
return 1.0f;
}
- /* Returns true if cspace is the XYZspace.
+ /*
+ * Returns {@code true} if {@code cspace} is the XYZspace.
*/
static boolean isCS_CIEXYZ(ColorSpace cspace) {
return (cspace == XYZspace);
--- a/src/java.desktop/share/classes/java/awt/color/ICC_ColorSpace.java Fri Oct 26 15:44:33 2018 +0530
+++ b/src/java.desktop/share/classes/java/awt/color/ICC_ColorSpace.java Mon Oct 29 17:34:05 2018 -0700
@@ -23,8 +23,7 @@
* questions.
*/
-/*
- **********************************************************************
+/* ********************************************************************
**********************************************************************
**********************************************************************
*** COPYRIGHT (c) Eastman Kodak Company, 1997 ***
@@ -36,54 +35,46 @@
package java.awt.color;
+import sun.java2d.cmm.CMSManager;
import sun.java2d.cmm.ColorTransform;
-import sun.java2d.cmm.CMSManager;
import sun.java2d.cmm.PCMM;
-
/**
- *
- * The ICC_ColorSpace class is an implementation of the abstract
- * ColorSpace class. This representation of
- * device independent and device dependent color spaces is based on the
- * International Color Consortium Specification ICC.1:2001-12, File Format for
- * Color Profiles (see <A href="http://www.color.org">http://www.color.org</A>).
+ * The {@code ICC_ColorSpace} class is an implementation of the abstract
+ * {@code ColorSpace} class. This representation of device independent and
+ * device dependent color spaces is based on the International Color Consortium
+ * Specification ICC.1:2001-12, File Format for Color Profiles (see
+ * <a href="http://www.color.org">http://www.color.org</a>).
* <p>
- * Typically, a Color or ColorModel would be associated with an ICC
- * Profile which is either an input, display, or output profile (see
- * the ICC specification). There are other types of ICC Profiles, e.g.
- * abstract profiles, device link profiles, and named color profiles,
- * which do not contain information appropriate for representing the color
- * space of a color, image, or device (see ICC_Profile).
- * Attempting to create an ICC_ColorSpace object from an inappropriate ICC
- * Profile is an error.
+ * Typically, a {@code Color} or {@code ColorModel} would be associated with an
+ * ICC Profile which is either an input, display, or output profile (see the ICC
+ * specification). There are other types of ICC Profiles, e.g. abstract
+ * profiles, device link profiles, and named color profiles, which do not
+ * contain information appropriate for representing the color space of a color,
+ * image, or device (see {@code ICC_Profile}). Attempting to create an
+ * {@code ICC_ColorSpace} object from an inappropriate ICC Profile is an error.
* <p>
- * ICC Profiles represent transformations from the color space of
- * the profile (e.g. a monitor) to a Profile Connection Space (PCS).
- * Profiles of interest for tagging images or colors have a
- * PCS which is one of the device independent
- * spaces (one CIEXYZ space and two CIELab spaces) defined in the
- * ICC Profile Format Specification. Most profiles of interest
- * either have invertible transformations or explicitly specify
- * transformations going both directions. Should an ICC_ColorSpace
- * object be used in a way requiring a conversion from PCS to
- * the profile's native space and there is inadequate data to
- * correctly perform the conversion, the ICC_ColorSpace object will
- * produce output in the specified type of color space (e.g. TYPE_RGB,
- * TYPE_CMYK, etc.), but the specific color values of the output data
- * will be undefined.
+ * ICC Profiles represent transformations from the color space of the profile
+ * (e.g. a monitor) to a Profile Connection Space (PCS). Profiles of interest
+ * for tagging images or colors have a PCS which is one of the device
+ * independent spaces (one CIEXYZ space and two CIELab spaces) defined in the
+ * ICC Profile Format Specification. Most profiles of interest either have
+ * invertible transformations or explicitly specify transformations going both
+ * directions. Should an {@code ICC_ColorSpace} object be used in a way
+ * requiring a conversion from PCS to the profile's native space and there is
+ * inadequate data to correctly perform the conversion, the
+ * {@code ICC_ColorSpace} object will produce output in the specified type of
+ * color space (e.g. {@code TYPE_RGB}, {@code TYPE_CMYK}, etc.), but the
+ * specific color values of the output data will be undefined.
* <p>
- * The details of this class are not important for simple applets,
- * which draw in a default color space or manipulate and display
- * imported images with a known color space. At most, such applets
- * would need to get one of the default color spaces via
- * ColorSpace.getInstance().
+ * The details of this class are not important for simple applets, which draw in
+ * a default color space or manipulate and display imported images with a known
+ * color space. At most, such applets would need to get one of the default color
+ * spaces via {@link ColorSpace#getInstance}.
+ *
* @see ColorSpace
* @see ICC_Profile
*/
-
-
-
public class ICC_ColorSpace extends ColorSpace {
static final long serialVersionUID = 3455889114070431483L;
@@ -101,13 +92,14 @@
private transient ColorTransform this2xyz;
private transient ColorTransform xyz2this;
-
/**
- * Constructs a new ICC_ColorSpace from an ICC_Profile object.
- * @param profile the specified ICC_Profile object
- * @exception IllegalArgumentException if profile is inappropriate for
- * representing a ColorSpace.
- */
+ * Constructs a new {@code ICC_ColorSpace} from an {@code ICC_Profile}
+ * object.
+ *
+ * @param profile the specified {@code ICC_Profile} object
+ * @throws IllegalArgumentException if profile is inappropriate for
+ * representing a {@code ColorSpace}
+ */
public ICC_ColorSpace (ICC_Profile profile) {
super (profile.getColorSpaceType(), profile.getNumComponents());
@@ -140,33 +132,33 @@
}
/**
- * Returns the ICC_Profile for this ICC_ColorSpace.
- * @return the ICC_Profile for this ICC_ColorSpace.
- */
+ * Returns the {@code ICC_Profile} for this {@code ICC_ColorSpace}.
+ *
+ * @return the {@code ICC_Profile} for this {@code ICC_ColorSpace}
+ */
public ICC_Profile getProfile() {
return thisProfile;
}
/**
- * Transforms a color value assumed to be in this ColorSpace
- * into a value in the default CS_sRGB color space.
+ * Transforms a color value assumed to be in this {@code ColorSpace} into a
+ * value in the default {@code CS_sRGB} color space.
* <p>
- * This method transforms color values using algorithms designed
- * to produce the best perceptual match between input and output
- * colors. In order to do colorimetric conversion of color values,
- * you should use the {@code toCIEXYZ}
- * method of this color space to first convert from the input
- * color space to the CS_CIEXYZ color space, and then use the
- * {@code fromCIEXYZ} method of the CS_sRGB color space to
- * convert from CS_CIEXYZ to the output color space.
- * See {@link #toCIEXYZ(float[]) toCIEXYZ} and
+ * This method transforms color values using algorithms designed to produce
+ * the best perceptual match between input and output colors. In order to do
+ * colorimetric conversion of color values, you should use the
+ * {@code toCIEXYZ} method of this color space to first convert from the
+ * input color space to the {@code CS_CIEXYZ} color space, and then use the
+ * {@code fromCIEXYZ} method of the {@code CS_sRGB} color space to convert
+ * from {@code CS_CIEXYZ} to the output color space. See
+ * {@link #toCIEXYZ(float[]) toCIEXYZ} and
* {@link #fromCIEXYZ(float[]) fromCIEXYZ} for further information.
*
- * @param colorvalue a float array with length of at least the number
- * of components in this ColorSpace.
- * @return a float array of length 3.
- * @throws ArrayIndexOutOfBoundsException if array length is not
- * at least the number of components in this ColorSpace.
+ * @param colorvalue a float array with length of at least the number of
+ * components in this {@code ColorSpace}
+ * @return a float array of length 3
+ * @throws ArrayIndexOutOfBoundsException if array length is not at least
+ * the number of components in this {@code ColorSpace}
*/
public float[] toRGB (float[] colorvalue) {
@@ -200,25 +192,23 @@
}
/**
- * Transforms a color value assumed to be in the default CS_sRGB
- * color space into this ColorSpace.
+ * Transforms a color value assumed to be in the default {@code CS_sRGB}
+ * color space into this {@code ColorSpace}.
* <p>
- * This method transforms color values using algorithms designed
- * to produce the best perceptual match between input and output
- * colors. In order to do colorimetric conversion of color values,
- * you should use the {@code toCIEXYZ}
- * method of the CS_sRGB color space to first convert from the input
- * color space to the CS_CIEXYZ color space, and then use the
- * {@code fromCIEXYZ} method of this color space to
- * convert from CS_CIEXYZ to the output color space.
- * See {@link #toCIEXYZ(float[]) toCIEXYZ} and
+ * This method transforms color values using algorithms designed to produce
+ * the best perceptual match between input and output colors. In order to do
+ * colorimetric conversion of color values, you should use the
+ * {@code toCIEXYZ} method of the {@code CS_sRGB} color space to first
+ * convert from the input color space to the {@code CS_CIEXYZ} color space,
+ * and then use the {@code fromCIEXYZ} method of this color space to convert
+ * from {@code CS_CIEXYZ} to the output color space. See
+ * {@link #toCIEXYZ(float[]) toCIEXYZ} and
* {@link #fromCIEXYZ(float[]) fromCIEXYZ} for further information.
*
- * @param rgbvalue a float array with length of at least 3.
- * @return a float array with length equal to the number of
- * components in this ColorSpace.
- * @throws ArrayIndexOutOfBoundsException if array length is not
- * at least 3.
+ * @param rgbvalue a float array with length of at least 3
+ * @return a float array with length equal to the number of components in
+ * this {@code ColorSpace}
+ * @throws ArrayIndexOutOfBoundsException if array length is not at least 3
*/
public float[] fromRGB(float[] rgbvalue) {
@@ -251,70 +241,66 @@
return result;
}
-
/**
- * Transforms a color value assumed to be in this ColorSpace
- * into the CS_CIEXYZ conversion color space.
+ * Transforms a color value assumed to be in this {@code ColorSpace} into
+ * the {@code CS_CIEXYZ} conversion color space.
* <p>
- * This method transforms color values using relative colorimetry,
- * as defined by the ICC Specification. This
- * means that the XYZ values returned by this method are represented
- * relative to the D50 white point of the CS_CIEXYZ color space.
- * This representation is useful in a two-step color conversion
- * process in which colors are transformed from an input color
- * space to CS_CIEXYZ and then to an output color space. This
- * representation is not the same as the XYZ values that would
- * be measured from the given color value by a colorimeter.
- * A further transformation is necessary to compute the XYZ values
- * that would be measured using current CIE recommended practices.
- * The paragraphs below explain this in more detail.
+ * This method transforms color values using relative colorimetry, as
+ * defined by the ICC Specification. This means that the XYZ values returned
+ * by this method are represented relative to the D50 white point of the
+ * {@code CS_CIEXYZ} color space. This representation is useful in a
+ * two-step color conversion process in which colors are transformed from an
+ * input color space to {@code CS_CIEXYZ} and then to an output color space.
+ * This representation is not the same as the XYZ values that would be
+ * measured from the given color value by a colorimeter. A further
+ * transformation is necessary to compute the XYZ values that would be
+ * measured using current CIE recommended practices. The paragraphs below
+ * explain this in more detail.
* <p>
* The ICC standard uses a device independent color space (DICS) as the
- * mechanism for converting color from one device to another device. In
- * this architecture, colors are converted from the source device's color
- * space to the ICC DICS and then from the ICC DICS to the destination
- * device's color space. The ICC standard defines device profiles which
- * contain transforms which will convert between a device's color space
- * and the ICC DICS. The overall conversion of colors from a source
- * device to colors of a destination device is done by connecting the
- * device-to-DICS transform of the profile for the source device to the
- * DICS-to-device transform of the profile for the destination device.
- * For this reason, the ICC DICS is commonly referred to as the profile
- * connection space (PCS). The color space used in the methods
- * toCIEXYZ and fromCIEXYZ is the CIEXYZ PCS defined by the ICC
- * Specification. This is also the color space represented by
- * ColorSpace.CS_CIEXYZ.
+ * mechanism for converting color from one device to another device. In this
+ * architecture, colors are converted from the source device's color space
+ * to the ICC DICS and then from the ICC DICS to the destination device's
+ * color space. The ICC standard defines device profiles which contain
+ * transforms which will convert between a device's color space and the ICC
+ * DICS. The overall conversion of colors from a source device to colors of
+ * a destination device is done by connecting the device-to-DICS transform
+ * of the profile for the source device to the DICS-to-device transform of
+ * the profile for the destination device. For this reason, the ICC DICS is
+ * commonly referred to as the profile connection space (PCS). The color
+ * space used in the methods {@code toCIEXYZ} and {@code fromCIEXYZ} is the
+ * CIEXYZ PCS defined by the ICC Specification. This is also the color space
+ * represented by {@code ColorSpace.CS_CIEXYZ}.
* <p>
- * The XYZ values of a color are often represented as relative to some
- * white point, so the actual meaning of the XYZ values cannot be known
- * without knowing the white point of those values. This is known as
- * relative colorimetry. The PCS uses a white point of D50, so the XYZ
- * values of the PCS are relative to D50. For example, white in the PCS
- * will have the XYZ values of D50, which is defined to be X=.9642,
- * Y=1.000, and Z=0.8249. This white point is commonly used for graphic
- * arts applications, but others are often used in other applications.
+ * The XYZ values of a color are often represented as relative to some white
+ * point, so the actual meaning of the XYZ values cannot be known without
+ * knowing the white point of those values. This is known as relative
+ * colorimetry. The PCS uses a white point of D50, so the XYZ values of the
+ * PCS are relative to D50. For example, white in the PCS will have the XYZ
+ * values of D50, which is defined to be X=.9642, Y=1.000, and Z=0.8249.
+ * This white point is commonly used for graphic arts applications, but
+ * others are often used in other applications.
* <p>
- * To quantify the color characteristics of a device such as a printer
- * or monitor, measurements of XYZ values for particular device colors
- * are typically made. For purposes of this discussion, the term
- * device XYZ values is used to mean the XYZ values that would be
- * measured from device colors using current CIE recommended practices.
+ * To quantify the color characteristics of a device such as a printer or
+ * monitor, measurements of XYZ values for particular device colors are
+ * typically made. For purposes of this discussion, the term device XYZ
+ * values is used to mean the XYZ values that would be measured from device
+ * colors using current CIE recommended practices.
* <p>
- * Converting between device XYZ values and the PCS XYZ values returned
- * by this method corresponds to converting between the device's color
- * space, as represented by CIE colorimetric values, and the PCS. There
- * are many factors involved in this process, some of which are quite
- * subtle. The most important, however, is the adjustment made to account
- * for differences between the device's white point and the white point of
- * the PCS. There are many techniques for doing this and it is the
- * subject of much current research and controversy. Some commonly used
- * methods are XYZ scaling, the von Kries transform, and the Bradford
- * transform. The proper method to use depends upon each particular
- * application.
+ * Converting between device XYZ values and the PCS XYZ values returned by
+ * this method corresponds to converting between the device's color space,
+ * as represented by CIE colorimetric values, and the PCS. There are many
+ * factors involved in this process, some of which are quite subtle. The
+ * most important, however, is the adjustment made to account for
+ * differences between the device's white point and the white point of the
+ * PCS. There are many techniques for doing this and it is the subject of
+ * much current research and controversy. Some commonly used methods are XYZ
+ * scaling, the von Kries transform, and the Bradford transform. The proper
+ * method to use depends upon each particular application.
* <p>
- * The simplest method is XYZ scaling. In this method each device XYZ
- * value is converted to a PCS XYZ value by multiplying it by the ratio
- * of the PCS white point (D50) to the device white point.
+ * The simplest method is XYZ scaling. In this method each device XYZ value
+ * is converted to a PCS XYZ value by multiplying it by the ratio of the PCS
+ * white point (D50) to the device white point.
* <pre>
*
* Xd, Yd, Zd are the device XYZ values
@@ -338,22 +324,21 @@
*
* </pre>
* <p>
- * Note that the media white point tag in an ICC profile is not the same
- * as the device white point. The media white point tag is expressed in
- * PCS values and is used to represent the difference between the XYZ of
- * device illuminant and the XYZ of the device media when measured under
- * that illuminant. The device white point is expressed as the device
- * XYZ values corresponding to white displayed on the device. For
- * example, displaying the RGB color (1.0, 1.0, 1.0) on an sRGB device
- * will result in a measured device XYZ value of D65. This will not
- * be the same as the media white point tag XYZ value in the ICC
- * profile for an sRGB device.
+ * Note that the media white point tag in an ICC profile is not the same as
+ * the device white point. The media white point tag is expressed in PCS
+ * values and is used to represent the difference between the XYZ of device
+ * illuminant and the XYZ of the device media when measured under that
+ * illuminant. The device white point is expressed as the device XYZ values
+ * corresponding to white displayed on the device. For example, displaying
+ * the RGB color (1.0, 1.0, 1.0) on an sRGB device will result in a measured
+ * device XYZ value of D65. This will not be the same as the media white
+ * point tag XYZ value in the ICC profile for an sRGB device.
*
- * @param colorvalue a float array with length of at least the number
- * of components in this ColorSpace.
- * @return a float array of length 3.
- * @throws ArrayIndexOutOfBoundsException if array length is not
- * at least the number of components in this ColorSpace.
+ * @param colorvalue a float array with length of at least the number of
+ * components in this {@code ColorSpace}
+ * @return a float array of length 3
+ * @throws ArrayIndexOutOfBoundsException if array length is not at least
+ * the number of components in this {@code ColorSpace}
*/
public float[] toCIEXYZ(float[] colorvalue) {
@@ -394,71 +379,67 @@
return result;
}
-
/**
- * Transforms a color value assumed to be in the CS_CIEXYZ conversion
- * color space into this ColorSpace.
+ * Transforms a color value assumed to be in the {@code CS_CIEXYZ}
+ * conversion color space into this ColorSpace.
* <p>
- * This method transforms color values using relative colorimetry,
- * as defined by the ICC Specification. This
- * means that the XYZ argument values taken by this method are represented
- * relative to the D50 white point of the CS_CIEXYZ color space.
- * This representation is useful in a two-step color conversion
- * process in which colors are transformed from an input color
- * space to CS_CIEXYZ and then to an output color space. The color
- * values returned by this method are not those that would produce
- * the XYZ value passed to the method when measured by a colorimeter.
- * If you have XYZ values corresponding to measurements made using
- * current CIE recommended practices, they must be converted to D50
- * relative values before being passed to this method.
- * The paragraphs below explain this in more detail.
+ * This method transforms color values using relative colorimetry, as
+ * defined by the ICC Specification. This means that the XYZ argument values
+ * taken by this method are represented relative to the D50 white point of
+ * the {@code CS_CIEXYZ} color space. This representation is useful in a
+ * two-step color conversion process in which colors are transformed from an
+ * input color space to {@code CS_CIEXYZ} and then to an output color space.
+ * The color values returned by this method are not those that would produce
+ * the XYZ value passed to the method when measured by a colorimeter. If you
+ * have XYZ values corresponding to measurements made using current CIE
+ * recommended practices, they must be converted to D50 relative values
+ * before being passed to this method. The paragraphs below explain this in
+ * more detail.
* <p>
* The ICC standard uses a device independent color space (DICS) as the
- * mechanism for converting color from one device to another device. In
- * this architecture, colors are converted from the source device's color
- * space to the ICC DICS and then from the ICC DICS to the destination
- * device's color space. The ICC standard defines device profiles which
- * contain transforms which will convert between a device's color space
- * and the ICC DICS. The overall conversion of colors from a source
- * device to colors of a destination device is done by connecting the
- * device-to-DICS transform of the profile for the source device to the
- * DICS-to-device transform of the profile for the destination device.
- * For this reason, the ICC DICS is commonly referred to as the profile
- * connection space (PCS). The color space used in the methods
- * toCIEXYZ and fromCIEXYZ is the CIEXYZ PCS defined by the ICC
- * Specification. This is also the color space represented by
- * ColorSpace.CS_CIEXYZ.
+ * mechanism for converting color from one device to another device. In this
+ * architecture, colors are converted from the source device's color space
+ * to the ICC DICS and then from the ICC DICS to the destination device's
+ * color space. The ICC standard defines device profiles which contain
+ * transforms which will convert between a device's color space and the ICC
+ * DICS. The overall conversion of colors from a source device to colors of
+ * a destination device is done by connecting the device-to-DICS transform
+ * of the profile for the source device to the DICS-to-device transform of
+ * the profile for the destination device. For this reason, the ICC DICS is
+ * commonly referred to as the profile connection space (PCS). The color
+ * space used in the methods {@code toCIEXYZ} and {@code fromCIEXYZ} is the
+ * CIEXYZ PCS defined by the ICC Specification. This is also the color space
+ * represented by {@code ColorSpace.CS_CIEXYZ}.
* <p>
- * The XYZ values of a color are often represented as relative to some
- * white point, so the actual meaning of the XYZ values cannot be known
- * without knowing the white point of those values. This is known as
- * relative colorimetry. The PCS uses a white point of D50, so the XYZ
- * values of the PCS are relative to D50. For example, white in the PCS
- * will have the XYZ values of D50, which is defined to be X=.9642,
- * Y=1.000, and Z=0.8249. This white point is commonly used for graphic
- * arts applications, but others are often used in other applications.
+ * The XYZ values of a color are often represented as relative to some white
+ * point, so the actual meaning of the XYZ values cannot be known without
+ * knowing the white point of those values. This is known as relative
+ * colorimetry. The PCS uses a white point of D50, so the XYZ values of the
+ * PCS are relative to D50. For example, white in the PCS will have the XYZ
+ * values of D50, which is defined to be X=.9642, Y=1.000, and Z=0.8249.
+ * This white point is commonly used for graphic arts applications, but
+ * others are often used in other applications.
* <p>
- * To quantify the color characteristics of a device such as a printer
- * or monitor, measurements of XYZ values for particular device colors
- * are typically made. For purposes of this discussion, the term
- * device XYZ values is used to mean the XYZ values that would be
- * measured from device colors using current CIE recommended practices.
+ * To quantify the color characteristics of a device such as a printer or
+ * monitor, measurements of XYZ values for particular device colors are
+ * typically made. For purposes of this discussion, the term device XYZ
+ * values is used to mean the XYZ values that would be measured from device
+ * colors using current CIE recommended practices.
* <p>
* Converting between device XYZ values and the PCS XYZ values taken as
* arguments by this method corresponds to converting between the device's
* color space, as represented by CIE colorimetric values, and the PCS.
* There are many factors involved in this process, some of which are quite
- * subtle. The most important, however, is the adjustment made to account
+ * subtle. The most important, however, is the adjustment made to account
* for differences between the device's white point and the white point of
- * the PCS. There are many techniques for doing this and it is the
- * subject of much current research and controversy. Some commonly used
- * methods are XYZ scaling, the von Kries transform, and the Bradford
- * transform. The proper method to use depends upon each particular
- * application.
+ * the PCS. There are many techniques for doing this and it is the subject
+ * of much current research and controversy. Some commonly used methods are
+ * XYZ scaling, the von Kries transform, and the Bradford transform. The
+ * proper method to use depends upon each particular application.
* <p>
- * The simplest method is XYZ scaling. In this method each device XYZ
- * value is converted to a PCS XYZ value by multiplying it by the ratio
- * of the PCS white point (D50) to the device white point.
+ * The simplest method is XYZ scaling. In this method each device XYZ value
+ * is converted to a PCS XYZ value by multiplying it by the ratio of the PCS
+ * white point (D50) to the device white point.
* <pre>
*
* Xd, Yd, Zd are the device XYZ values
@@ -482,22 +463,20 @@
*
* </pre>
* <p>
- * Note that the media white point tag in an ICC profile is not the same
- * as the device white point. The media white point tag is expressed in
- * PCS values and is used to represent the difference between the XYZ of
- * device illuminant and the XYZ of the device media when measured under
- * that illuminant. The device white point is expressed as the device
- * XYZ values corresponding to white displayed on the device. For
- * example, displaying the RGB color (1.0, 1.0, 1.0) on an sRGB device
- * will result in a measured device XYZ value of D65. This will not
- * be the same as the media white point tag XYZ value in the ICC
- * profile for an sRGB device.
+ * Note that the media white point tag in an ICC profile is not the same as
+ * the device white point. The media white point tag is expressed in PCS
+ * values and is used to represent the difference between the XYZ of device
+ * illuminant and the XYZ of the device media when measured under that
+ * illuminant. The device white point is expressed as the device XYZ values
+ * corresponding to white displayed on the device. For example, displaying
+ * the RGB color (1.0, 1.0, 1.0) on an sRGB device will result in a measured
+ * device XYZ value of D65. This will not be the same as the media white
+ * point tag XYZ value in the ICC profile for an sRGB device.
*
- * @param colorvalue a float array with length of at least 3.
- * @return a float array with length equal to the number of
- * components in this ColorSpace.
- * @throws ArrayIndexOutOfBoundsException if array length is not
- * at least 3.
+ * @param colorvalue a float array with length of at least 3
+ * @return a float array with length equal to the number of components in
+ * this {@code ColorSpace}
+ * @throws ArrayIndexOutOfBoundsException if array length is not at least 3
*/
public float[] fromCIEXYZ(float[] colorvalue) {
@@ -540,19 +519,20 @@
}
/**
- * Returns the minimum normalized color component value for the
- * specified component. For TYPE_XYZ spaces, this method returns
- * minimum values of 0.0 for all components. For TYPE_Lab spaces,
- * this method returns 0.0 for L and -128.0 for a and b components.
- * This is consistent with the encoding of the XYZ and Lab Profile
- * Connection Spaces in the ICC specification. For all other types, this
- * method returns 0.0 for all components. When using an ICC_ColorSpace
- * with a profile that requires different minimum component values,
- * it is necessary to subclass this class and override this method.
- * @param component The component index.
- * @return The minimum normalized component value.
- * @throws IllegalArgumentException if component is less than 0 or
- * greater than numComponents - 1.
+ * Returns the minimum normalized color component value for the specified
+ * component. For {@code TYPE_XYZ} spaces, this method returns minimum
+ * values of 0.0 for all components. For {@code TYPE_Lab} spaces, this
+ * method returns 0.0 for L and -128.0 for a and b components. This is
+ * consistent with the encoding of the XYZ and Lab Profile Connection Spaces
+ * in the ICC specification. For all other types, this method returns 0.0
+ * for all components. When using an {@code ICC_ColorSpace} with a profile
+ * that requires different minimum component values, it is necessary to
+ * subclass this class and override this method.
+ *
+ * @param component the component index
+ * @return the minimum normalized component value
+ * @throws IllegalArgumentException if component is less than 0 or greater
+ * than {@code numComponents - 1}
* @since 1.4
*/
public float getMinValue(int component) {
@@ -564,20 +544,21 @@
}
/**
- * Returns the maximum normalized color component value for the
- * specified component. For TYPE_XYZ spaces, this method returns
- * maximum values of 1.0 + (32767.0 / 32768.0) for all components.
- * For TYPE_Lab spaces,
- * this method returns 100.0 for L and 127.0 for a and b components.
- * This is consistent with the encoding of the XYZ and Lab Profile
- * Connection Spaces in the ICC specification. For all other types, this
- * method returns 1.0 for all components. When using an ICC_ColorSpace
- * with a profile that requires different maximum component values,
- * it is necessary to subclass this class and override this method.
- * @param component The component index.
- * @return The maximum normalized component value.
- * @throws IllegalArgumentException if component is less than 0 or
- * greater than numComponents - 1.
+ * Returns the maximum normalized color component value for the specified
+ * component. For {@code TYPE_XYZ} spaces, this method returns maximum
+ * values of 1.0 + (32767.0 / 32768.0) for all components. For
+ * {@code TYPE_Lab} spaces, this method returns 100.0 for L and 127.0 for a
+ * and b components. This is consistent with the encoding of the XYZ and Lab
+ * Profile Connection Spaces in the ICC specification. For all other types,
+ * this method returns 1.0 for all components. When using an
+ * {@code ICC_ColorSpace} with a profile that requires different maximum
+ * component values, it is necessary to subclass this class and override
+ * this method.
+ *
+ * @param component the component index
+ * @return the maximum normalized component value
+ * @throws IllegalArgumentException if component is less than 0 or greater
+ * than {@code numComponents - 1}
* @since 1.4
*/
public float getMaxValue(int component) {
--- a/src/java.desktop/share/classes/java/awt/color/ICC_Profile.java Fri Oct 26 15:44:33 2018 +0530
+++ b/src/java.desktop/share/classes/java/awt/color/ICC_Profile.java Mon Oct 29 17:34:05 2018 -0700
@@ -23,8 +23,7 @@
* questions.
*/
-/*
- **********************************************************************
+/* ********************************************************************
**********************************************************************
**********************************************************************
*** COPYRIGHT (c) Eastman Kodak Company, 1997 ***
@@ -36,17 +35,8 @@
package java.awt.color;
-import sun.java2d.cmm.PCMM;
-import sun.java2d.cmm.CMSManager;
-import sun.java2d.cmm.Profile;
-import sun.java2d.cmm.ProfileDataVerifier;
-import sun.java2d.cmm.ProfileDeferralMgr;
-import sun.java2d.cmm.ProfileDeferralInfo;
-import sun.java2d.cmm.ProfileActivator;
-
import java.io.File;
import java.io.FileInputStream;
-import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FilePermission;
import java.io.IOException;
@@ -56,42 +46,43 @@
import java.io.ObjectStreamException;
import java.io.OutputStream;
import java.io.Serializable;
-
+import java.security.AccessController;
+import java.security.PrivilegedAction;
import java.util.StringTokenizer;
-import java.security.AccessController;
-import java.security.PrivilegedAction;
-
+import sun.java2d.cmm.CMSManager;
+import sun.java2d.cmm.PCMM;
+import sun.java2d.cmm.Profile;
+import sun.java2d.cmm.ProfileActivator;
+import sun.java2d.cmm.ProfileDataVerifier;
+import sun.java2d.cmm.ProfileDeferralInfo;
+import sun.java2d.cmm.ProfileDeferralMgr;
/**
- * A representation of color profile data for device independent and
- * device dependent color spaces based on the International Color
- * Consortium Specification ICC.1:2001-12, File Format for Color Profiles,
- * (see <A href="http://www.color.org"> http://www.color.org</A>).
+ * A representation of color profile data for device independent and device
+ * dependent color spaces based on the International Color Consortium
+ * Specification ICC.1:2001-12, File Format for Color Profiles, (see
+ * <a href="http://www.color.org"> http://www.color.org</a>).
* <p>
- * An ICC_ColorSpace object can be constructed from an appropriate
- * ICC_Profile.
- * Typically, an ICC_ColorSpace would be associated with an ICC
- * Profile which is either an input, display, or output profile (see
- * the ICC specification). There are also device link, abstract,
- * color space conversion, and named color profiles. These are less
- * useful for tagging a color or image, but are useful for other
- * purposes (in particular device link profiles can provide improved
- * performance for converting from one device's color space to
- * another's).
+ * An {@code ICC_ColorSpace} object can be constructed from an appropriate
+ * {@code ICC_Profile}. Typically, an {@code ICC_ColorSpace} would be associated
+ * with an ICC Profile which is either an input, display, or output profile (see
+ * the ICC specification). There are also device link, abstract, color space
+ * conversion, and named color profiles. These are less useful for tagging a
+ * color or image, but are useful for other purposes (in particular device link
+ * profiles can provide improved performance for converting from one device's
+ * color space to another's).
* <p>
- * ICC Profiles represent transformations from the color space of
- * the profile (e.g. a monitor) to a Profile Connection Space (PCS).
- * Profiles of interest for tagging images or colors have a PCS
- * which is one of the two specific device independent
- * spaces (one CIEXYZ space and one CIELab space) defined in the
- * ICC Profile Format Specification. Most profiles of interest
- * either have invertible transformations or explicitly specify
- * transformations going both directions.
+ * ICC Profiles represent transformations from the color space of the profile
+ * (e.g. a monitor) to a Profile Connection Space (PCS). Profiles of interest
+ * for tagging images or colors have a PCS which is one of the two specific
+ * device independent spaces (one CIEXYZ space and one CIELab space) defined in
+ * the ICC Profile Format Specification. Most profiles of interest either have
+ * invertible transformations or explicitly specify transformations going both
+ * directions.
+ *
* @see ICC_ColorSpace
*/
-
-
public class ICC_Profile implements Serializable {
private static final long serialVersionUID = -3938515861990936766L;
@@ -110,7 +101,6 @@
private static ICC_Profile GRAYprofile;
private static ICC_Profile LINEAR_RGBprofile;
-
/**
* Profile class is input.
*/
@@ -146,7 +136,6 @@
*/
public static final int CLASS_NAMEDCOLOR = 6;
-
/**
* ICC Profile Color Space Type Signature: 'XYZ '.
*/
@@ -321,6 +310,7 @@
/**
* ICC Profile Rendering Intent: Media-RelativeColorimetric.
+ *
* @since 1.5
*/
public static final int icMediaRelativeColorimetric = 1;
@@ -337,6 +327,7 @@
/**
* ICC Profile Rendering Intent: ICC-AbsoluteColorimetric.
+ *
* @since 1.5
*/
public static final int icICCAbsoluteColorimetric = 3;
@@ -369,6 +360,7 @@
/**
* ICC Profile Tag Signature: 'bXYZ'.
+ *
* @since 1.5
*/
public static final int icSigBlueMatrixColumnTag = 0x6258595A; /* 'bXYZ' */
@@ -446,6 +438,7 @@
/**
* ICC Profile Tag Signature: 'gXYZ'.
+ *
* @since 1.5
*/
public static final int icSigGreenMatrixColumnTag = 0x6758595A;/* 'gXYZ' */
@@ -550,6 +543,7 @@
/**
* ICC Profile Tag Signature: 'rXYZ'.
+ *
* @since 1.5
*/
public static final int icSigRedMatrixColumnTag = 0x7258595A; /* 'rXYZ' */
@@ -596,18 +590,21 @@
/**
* ICC Profile Tag Signature: 'chad'.
+ *
* @since 1.5
*/
public static final int icSigChromaticAdaptationTag = 0x63686164;/* 'chad' */
/**
* ICC Profile Tag Signature: 'clro'.
+ *
* @since 1.5
*/
public static final int icSigColorantOrderTag = 0x636C726F; /* 'clro' */
/**
* ICC Profile Tag Signature: 'clrt'.
+ *
* @since 1.5
*/
public static final int icSigColorantTableTag = 0x636C7274; /* 'clrt' */
@@ -695,6 +692,7 @@
/**
* ICC Profile Header Location: profile's ID.
+ *
* @since 1.5
*/
public static final int icHdrProfileID = 84; /* Profile's ID */
@@ -727,15 +725,14 @@
/**
- * Constructs an ICC_Profile object with a given ID.
+ * Constructs an {@code ICC_Profile} object with a given ID.
*/
ICC_Profile(Profile p) {
this.cmmProfile = p;
}
-
/**
- * Constructs an ICC_Profile object whose loading will be deferred.
+ * Constructs an {@code ICC_Profile} object whose loading will be deferred.
* The ID will be 0 until the profile is loaded.
*/
ICC_Profile(ProfileDeferralInfo pdi) {
@@ -748,18 +745,18 @@
ProfileDeferralMgr.registerDeferral(this.profileActivator);
}
-
/**
- * Frees the resources associated with an ICC_Profile object.
+ * Frees the resources associated with an {@code ICC_Profile} object.
*
- * @deprecated The {@code finalize} method has been deprecated.
- * Subclasses that override {@code finalize} in order to perform cleanup
- * should be modified to use alternative cleanup mechanisms and
- * to remove the overriding {@code finalize} method.
- * When overriding the {@code finalize} method, its implementation must explicitly
- * ensure that {@code super.finalize()} is invoked as described in {@link Object#finalize}.
- * See the specification for {@link Object#finalize()} for further
- * information about migration options.
+ * @deprecated The {@code finalize} method has been deprecated. Subclasses
+ * that override {@code finalize} in order to perform cleanup should
+ * be modified to use alternative cleanup mechanisms and to remove
+ * the overriding {@code finalize} method. When overriding the
+ * {@code finalize} method, its implementation must explicitly
+ * ensure that {@code super.finalize()} is invoked as described in
+ * {@link Object#finalize}. See the specification for {@link
+ * Object#finalize()} for further information about migration
+ * options.
*/
@Deprecated(since="9")
protected void finalize () {
@@ -770,14 +767,14 @@
}
}
-
/**
- * Constructs an ICC_Profile object corresponding to the data in
- * a byte array. Throws an IllegalArgumentException if the data
- * does not correspond to a valid ICC Profile.
- * @param data the specified ICC Profile data
- * @return an {@code ICC_Profile} object corresponding to
- * the data in the specified {@code data} array.
+ * Constructs an {@code ICC_Profile} object corresponding to the data in a
+ * byte array. Throws an {@code IllegalArgumentException} if the data does
+ * not correspond to a valid ICC Profile.
+ *
+ * @param data the specified ICC Profile data
+ * @return an {@code ICC_Profile} object corresponding to the data in the
+ * specified {@code data} array
*/
public static ICC_Profile getInstance(byte[] data) {
ICC_Profile thisProfile;
@@ -821,22 +818,19 @@
return thisProfile;
}
-
-
/**
- * Constructs an ICC_Profile corresponding to one of the specific color
- * spaces defined by the ColorSpace class (for example CS_sRGB).
- * Throws an IllegalArgumentException if cspace is not one of the
- * defined color spaces.
+ * Constructs an {@code ICC_Profile} corresponding to one of the specific
+ * color spaces defined by the {@code ColorSpace} class (for example
+ * {@code CS_sRGB}). Throws an {@code IllegalArgumentException} if cspace is
+ * not one of the defined color spaces.
*
- * @param cspace the type of color space to create a profile for.
- * The specified type is one of the color
- * space constants defined in the {@code ColorSpace} class.
- *
- * @return an {@code ICC_Profile} object corresponding to
- * the specified {@code ColorSpace} type.
- * @exception IllegalArgumentException If {@code cspace} is not
- * one of the predefined color space types.
+ * @param cspace the type of color space to create a profile for. The
+ * specified type is one of the color space constants defined in the
+ * {@code ColorSpace} class.
+ * @return an {@code ICC_Profile} object corresponding to the specified
+ * {@code ColorSpace} type
+ * @throws IllegalArgumentException If {@code cspace} is not one of the
+ * predefined color space types
*/
public static ICC_Profile getInstance (int cspace) {
ICC_Profile thisProfile = null;
@@ -931,51 +925,49 @@
return thisProfile;
}
- /* This asserts system privileges, so is used only for the
- * standard profiles.
+ /**
+ * This method asserts system privileges, so is used only for the standard
+ * profiles.
*/
private static ICC_Profile getStandardProfile(final String name) {
-
return AccessController.doPrivileged(
- new PrivilegedAction<ICC_Profile>() {
- public ICC_Profile run() {
- ICC_Profile p = null;
- try {
- p = getInstance (name);
- } catch (IOException ex) {
- throw new IllegalArgumentException(
- "Can't load standard profile: " + name);
- }
- return p;
- }
- });
+ new PrivilegedAction<ICC_Profile>() {
+ public ICC_Profile run() {
+ ICC_Profile p = null;
+ try {
+ p = getInstance(name);
+ } catch (IOException ex) {
+ throw new IllegalArgumentException(
+ "Can't load standard profile: " + name);
+ }
+ return p;
+ }
+ });
}
/**
- * Constructs an ICC_Profile corresponding to the data in a file.
- * fileName may be an absolute or a relative file specification.
- * Relative file names are looked for in several places: first, relative
- * to any directories specified by the java.iccprofile.path property;
- * second, relative to any directories specified by the java.class.path
- * property; finally, in a directory used to store profiles always
- * available, such as the profile for sRGB. Built-in profiles use .pf as
- * the file name extension for profiles, e.g. sRGB.pf.
- * This method throws an IOException if the specified file cannot be
- * opened or if an I/O error occurs while reading the file. It throws
- * an IllegalArgumentException if the file does not contain valid ICC
- * Profile data.
- * @param fileName The file that contains the data for the profile.
+ * Constructs an {@code ICC_Profile} corresponding to the data in a file.
+ * {@code fileName} may be an absolute or a relative file specification.
+ * Relative file names are looked for in several places: first, relative to
+ * any directories specified by the {@code java.iccprofile.path} property;
+ * second, relative to any directories specified by the
+ * {@code java.class.path} property; finally, in a directory used to store
+ * profiles always available, such as the profile for sRGB. Built-in
+ * profiles use {@code .pf} as the file name extension for profiles, e.g.
+ * {@code sRGB.pf}. This method throws an {@code IOException} if the
+ * specified file cannot be opened or if an I/O error occurs while reading
+ * the file. It throws an {@code IllegalArgumentException} if the file does
+ * not contain valid ICC Profile data.
*
- * @return an {@code ICC_Profile} object corresponding to
- * the data in the specified file.
- * @exception IOException If the specified file cannot be opened or
- * an I/O error occurs while reading the file.
- *
- * @exception IllegalArgumentException If the file does not
- * contain valid ICC Profile data.
- *
- * @exception SecurityException If a security manager is installed
- * and it does not permit read access to the given file.
+ * @param fileName the file that contains the data for the profile
+ * @return an {@code ICC_Profile} object corresponding to the data in the
+ * specified file
+ * @throws IOException If the specified file cannot be opened or an I/O
+ * error occurs while reading the file
+ * @throws IllegalArgumentException If the file does not contain valid ICC
+ * Profile data
+ * @throws SecurityException If a security manager is installed and it does
+ * not permit read access to the given file
*/
public static ICC_Profile getInstance(String fileName) throws IOException {
ICC_Profile thisProfile;
@@ -999,21 +991,19 @@
return thisProfile;
}
-
/**
- * Constructs an ICC_Profile corresponding to the data in an InputStream.
- * This method throws an IllegalArgumentException if the stream does not
- * contain valid ICC Profile data. It throws an IOException if an I/O
- * error occurs while reading the stream.
- * @param s The input stream from which to read the profile data.
+ * Constructs an {@code ICC_Profile} corresponding to the data in an
+ * {@code InputStream}. This method throws an
+ * {@code IllegalArgumentException} if the stream does not contain valid ICC
+ * Profile data. It throws an {@code IOException} if an I/O error occurs
+ * while reading the stream.
*
- * @return an {@code ICC_Profile} object corresponding to the
- * data in the specified {@code InputStream}.
- *
- * @exception IOException If an I/O error occurs while reading the stream.
- *
- * @exception IllegalArgumentException If the stream does not
- * contain valid ICC Profile data.
+ * @param s the input stream from which to read the profile data
+ * @return an {@code ICC_Profile} object corresponding to the data in the
+ * specified {@code InputStream}
+ * @throws IOException If an I/O error occurs while reading the stream
+ * @throws IllegalArgumentException If the stream does not contain valid ICC
+ * Profile data
*/
public static ICC_Profile getInstance(InputStream s) throws IOException {
byte[] profileData;
@@ -1070,17 +1060,15 @@
return profileData;
}
-
/**
- * Constructs an ICC_Profile for which the actual loading of the
- * profile data from a file and the initialization of the CMM should
- * be deferred as long as possible.
- * Deferral is only used for standard profiles.
- * If deferring is disabled, then getStandardProfile() ensures
- * that all of the appropriate access privileges are granted
- * when loading this profile.
- * If deferring is enabled, then the deferred activation
- * code will take care of access privileges.
+ * Constructs an {@code ICC_Profile} for which the actual loading of the
+ * profile data from a file and the initialization of the CMM should be
+ * deferred as long as possible. Deferral is only used for standard
+ * profiles. If deferring is disabled, then getStandardProfile() ensures
+ * that all of the appropriate access privileges are granted when loading
+ * this profile. If deferring is enabled, then the deferred activation code
+ * will take care of access privileges.
+ *
* @see #activateDeferredProfile()
*/
static ICC_Profile getDeferredInstance(ProfileDeferralInfo pdi) {
@@ -1131,10 +1119,10 @@
}
}
-
/**
* Returns profile major version.
- * @return The major version of the profile.
+ *
+ * @return the major version of the profile
*/
public int getMajorVersion() {
byte[] theHeader;
@@ -1147,7 +1135,8 @@
/**
* Returns profile minor version.
- * @return The minor version of the profile.
+ *
+ * @return the minor version of the profile
*/
public int getMinorVersion() {
byte[] theHeader;
@@ -1160,7 +1149,8 @@
/**
* Returns the profile class.
- * @return One of the predefined profile class constants.
+ *
+ * @return one of the predefined profile class constants
*/
public int getProfileClass() {
byte[] theHeader;
@@ -1214,16 +1204,16 @@
}
/**
- * Returns the color space type. Returns one of the color space type
- * constants defined by the ColorSpace class. This is the
- * "input" color space of the profile. 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 One of the color space type constants defined in the
- * {@code ColorSpace} class.
+ * Returns the color space type. Returns one of the color space type
+ * constants defined by the {@code ColorSpace} class. This is the "input"
+ * color space of the profile. The type defines the number of components of
+ * the color space and the interpretation, e.g. {@code 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 one of the color space type constants defined in the
+ * {@code ColorSpace} class
*/
public int getColorSpaceType() {
if (deferralInfo != null) {
@@ -1247,15 +1237,16 @@
/**
* Returns the color space type of the Profile Connection Space (PCS).
- * Returns one of the color space type constants defined by the
- * ColorSpace class. This is the "output" color space of the
- * profile. For an input, display, or output profile useful
- * for tagging colors or images, this will be either TYPE_XYZ or
- * TYPE_Lab and should be interpreted as the corresponding specific
- * color space defined in the ICC specification. For a device
- * link profile, this could be any of the color space type constants.
- * @return One of the color space type constants defined in the
- * {@code ColorSpace} class.
+ * Returns one of the color space type constants defined by the ColorSpace
+ * class. This is the "output" color space of the profile. For an input,
+ * display, or output profile useful for tagging colors or images, this will
+ * be either {@code TYPE_XYZ} or {@code TYPE_Lab} and should be interpreted
+ * as the corresponding specific color space defined in the ICC
+ * specification. For a device link profile, this could be any of the color
+ * space type constants.
+ *
+ * @return one of the color space type constants defined in the
+ * {@code ColorSpace} class
*/
public int getPCSType() {
if (ProfileDeferralMgr.deferring) {
@@ -1275,14 +1266,12 @@
return thePCS;
}
-
/**
- * Write this ICC_Profile to a file.
+ * Write this {@code ICC_Profile} to a file.
*
- * @param fileName The file to write the profile data to.
- *
- * @exception IOException If the file cannot be opened for writing
- * or an I/O error occurs while writing to the file.
+ * @param fileName the file to write the profile data to
+ * @throws IOException If the file cannot be opened for writing or an I/O
+ * error occurs while writing to the file
*/
public void write(String fileName) throws IOException {
FileOutputStream outputFile;
@@ -1295,14 +1284,11 @@
outputFile.close ();
}
-
/**
- * Write this ICC_Profile to an OutputStream.
+ * Write this {@code ICC_Profile} to an {@code OutputStream}.
*
- * @param s The stream to write the profile data to.
- *
- * @exception IOException If an I/O error occurs while writing to the
- * stream.
+ * @param s the stream to write the profile data to
+ * @throws IOException If an I/O error occurs while writing to the stream
*/
public void write(OutputStream s) throws IOException {
byte[] profileData;
@@ -1312,10 +1298,11 @@
s.write(profileData);
}
-
/**
- * Returns a byte array corresponding to the data of this ICC_Profile.
- * @return A byte array that contains the profile data.
+ * Returns a byte array corresponding to the data of this
+ * {@code ICC_Profile}.
+ *
+ * @return a byte array that contains the profile data
* @see #setData(int, byte[])
*/
public byte[] getData() {
@@ -1339,20 +1326,17 @@
return profileData;
}
-
/**
- * Returns a particular tagged data element from the profile as
- * a byte array. Elements are identified by signatures
- * as defined in the ICC specification. The signature
- * icSigHead can be used to get the header. This method is useful
- * for advanced applets or applications which need to access
- * profile data directly.
+ * Returns a particular tagged data element from the profile as a byte
+ * array. Elements are identified by signatures as defined in the ICC
+ * specification. The signature icSigHead can be used to get the header.
+ * This method is useful for advanced applets or applications which need to
+ * access profile data directly.
*
- * @param tagSignature The ICC tag signature for the data element you
- * want to get.
- *
- * @return A byte array that contains the tagged data element. Returns
- * {@code null} if the specified tag doesn't exist.
+ * @param tagSignature the ICC tag signature for the data element you want
+ * to get
+ * @return a byte array that contains the tagged data element. Returns
+ * {@code null} if the specified tag doesn't exist.
* @see #setData(int, byte[])
*/
public byte[] getData(int tagSignature) {
@@ -1387,20 +1371,20 @@
}
/**
- * Sets a particular tagged data element in the profile from
- * a byte array. The array should contain data in a format, corresponded
- * to the {@code tagSignature} as defined in the ICC specification, section 10.
+ * Sets a particular tagged data element in the profile from a byte array.
+ * The array should contain data in a format, corresponded to the
+ * {@code tagSignature} as defined in the ICC specification, section 10.
* This method is useful for advanced applets or applications which need to
* access profile data directly.
*
- * @param tagSignature The ICC tag signature for the data element
- * you want to set.
- * @param tagData the data to set for the specified tag signature
- * @throws IllegalArgumentException if {@code tagSignature} is not a signature
- * as defined in the ICC specification.
+ * @param tagSignature the ICC tag signature for the data element you want
+ * to set
+ * @param tagData the data to set for the specified tag signature
+ * @throws IllegalArgumentException if {@code tagSignature} is not a
+ * signature as defined in the ICC specification.
* @throws IllegalArgumentException if a content of the {@code tagData}
- * array can not be interpreted as valid tag data, corresponding
- * to the {@code tagSignature}.
+ * array can not be interpreted as valid tag data, corresponding to
+ * the {@code tagSignature}
* @see #getData
*/
public void setData(int tagSignature, byte[] tagData) {
@@ -1413,9 +1397,8 @@
}
/**
- * Sets the rendering intent of the profile.
- * This is used to select the proper transform from a profile that
- * has multiple transforms.
+ * Sets the rendering intent of the profile. This is used to select the
+ * proper transform from a profile that has multiple transforms.
*/
void setRenderingIntent(int renderingIntent) {
byte[] theHeader = getData(icSigHead);/* getData will activate deferred
@@ -1425,12 +1408,11 @@
setData (icSigHead, theHeader);
}
-
/**
- * Returns the rendering intent of the profile.
- * This is used to select the proper transform from a profile that
- * has multiple transforms. It is typically set in a source profile
- * to select a transform from an output profile.
+ * Returns the rendering intent of the profile. This is used to select the
+ * proper transform from a profile that has multiple transforms. It is
+ * typically set in a source profile to select a transform from an output
+ * profile.
*/
int getRenderingIntent() {
byte[] theHeader = getData(icSigHead);/* getData will activate deferred
@@ -1449,17 +1431,13 @@
return (0xffff & renderingIntent);
}
-
/**
- * Returns the number of color components in the "input" color
- * space of this profile. For example if the color space type
- * of this profile is TYPE_RGB, then this method will return 3.
+ * Returns the number of color components in the "input" color space of this
+ * profile. For example if the color space type of this profile is
+ * {@code TYPE_RGB}, then this method will return 3.
*
- * @return The number of color components in the profile's input
- * color space.
- *
- * @throws ProfileDataException if color space is in the profile
- * is invalid
+ * @return the number of color components in the profile's input color space
+ * @throws ProfileDataException if color space is in the profile is invalid
*/
public int getNumComponents() {
byte[] theHeader;
@@ -1553,20 +1531,18 @@
return theNumComponents;
}
-
/**
- * Returns a float array of length 3 containing the X, Y, and Z
- * components of the mediaWhitePointTag in the ICC profile.
+ * Returns a float array of length 3 containing the X, Y, and Z components
+ * of the mediaWhitePointTag in the ICC profile.
*/
float[] getMediaWhitePoint() {
return getXYZTag(icSigMediaWhitePointTag);
/* get the media white point tag */
}
-
/**
- * Returns a float array of length 3 containing the X, Y, and Z
- * components encoded in an XYZType tag.
+ * Returns a float array of length 3 containing the X, Y, and Z components
+ * encoded in an XYZType tag.
*/
float[] getXYZTag(int theTagSignature) {
byte[] theData;
@@ -1587,17 +1563,17 @@
return theXYZNumber;
}
-
/**
- * Returns a gamma value representing a tone reproduction
- * curve (TRC). If the profile represents the TRC as a table rather
- * than a single gamma value, then an exception is thrown. In this
- * case the actual table can be obtained via getTRC().
- * theTagSignature should be one of icSigGrayTRCTag, icSigRedTRCTag,
- * icSigGreenTRCTag, or icSigBlueTRCTag.
- * @return the gamma value as a float.
- * @exception ProfileDataException if the profile does not specify
- * the TRC as a single gamma value.
+ * Returns a gamma value representing a tone reproduction curve (TRC). If
+ * the profile represents the TRC as a table rather than a single gamma
+ * value, then an exception is thrown. In this case the actual table can be
+ * obtained via {@link #getTRC}. {@code theTagSignature} should be one of
+ * {@code icSigGrayTRCTag}, {@code icSigRedTRCTag},
+ * {@code icSigGreenTRCTag}, or {@code icSigBlueTRCTag}.
+ *
+ * @return the gamma value as a float
+ * @throws ProfileDataException if the profile does not specify the TRC as a
+ * single gamma value
*/
float getGamma(int theTagSignature) {
byte[] theTRCData;
@@ -1620,26 +1596,25 @@
return theGamma;
}
-
/**
- * Returns the TRC as an array of shorts. If the profile has
- * specified the TRC as linear (gamma = 1.0) or as a simple gamma
- * value, this method throws an exception, and the getGamma() method
- * should be used to get the gamma value. Otherwise the short array
- * returned here represents a lookup table where the input Gray value
- * is conceptually in the range [0.0, 1.0]. Value 0.0 maps
- * to array index 0 and value 1.0 maps to array index length-1.
- * Interpolation may be used to generate output values for
- * input values which do not map exactly to an index in the
- * array. Output values also map linearly to the range [0.0, 1.0].
- * Value 0.0 is represented by an array value of 0x0000 and
- * value 1.0 by 0xFFFF, i.e. the values are really unsigned
- * short values, although they are returned in a short array.
- * theTagSignature should be one of icSigGrayTRCTag, icSigRedTRCTag,
- * icSigGreenTRCTag, or icSigBlueTRCTag.
- * @return a short array representing the TRC.
- * @exception ProfileDataException if the profile does not specify
- * the TRC as a table.
+ * Returns the TRC as an array of shorts. If the profile has specified the
+ * TRC as linear (gamma = 1.0) or as a simple gamma value, this method
+ * throws an exception, and the {@link #getGamma} method should be used to
+ * get the gamma value. Otherwise the short array returned here represents a
+ * lookup table where the input Gray value is conceptually in the range
+ * [0.0, 1.0]. Value 0.0 maps to array index 0 and value 1.0 maps to array
+ * index length-1. Interpolation may be used to generate output values for
+ * input values which do not map exactly to an index in the array. Output
+ * values also map linearly to the range [0.0, 1.0]. Value 0.0 is
+ * represented by an array value of 0x0000 and value 1.0 by 0xFFFF, i.e. the
+ * values are really unsigned short values, although they are returned in a
+ * short array. {@code theTagSignature} should be one of
+ * {@code icSigGrayTRCTag}, {@code icSigRedTRCTag},
+ * {@code icSigGreenTRCTag}, or {@code icSigBlueTRCTag}.
+ *
+ * @return a short array representing the TRC
+ * @throws ProfileDataException if the profile does not specify the TRC as a
+ * table
*/
short[] getTRC(int theTagSignature) {
byte[] theTRCData;
@@ -1666,8 +1641,9 @@
return theTRC;
}
-
- /* convert an ICC color space signature into a Java color space type */
+ /**
+ * Convert an ICC color space signature into a Java color space type.
+ */
static int iccCStoJCS(int theColorSpaceSig) {
int theColorSpace;
@@ -1775,7 +1751,6 @@
default:
throw new IllegalArgumentException ("Unknown color space");
}
-
return theColorSpace;
}
@@ -1807,17 +1782,16 @@
array[index+1] = (byte) (value);
}
-
- /*
- * fileName may be an absolute or a relative file specification.
- * Relative file names are looked for in several places: first, relative
- * to any directories specified by the java.iccprofile.path property;
- * second, relative to any directories specified by the java.class.path.
- * The built-in profile files are now loaded as resources, since they
- * may not be individual disk files, and so this method will not find
- * these and on a null return, the caller needs to try as resources.
- * Built-in profiles use .pf as the file name extension for profiles,
- * e.g. sRGB.pf.
+ /**
+ * {@code fileName} may be an absolute or a relative file specification.
+ * Relative file names are looked for in several places: first, relative to
+ * any directories specified by the {@code java.iccprofile.path} property;
+ * second, relative to any directories specified by the
+ * {@code java.class.path}. The built-in profile files are now loaded as
+ * resources, since they may not be individual disk files, and so this
+ * method will not find these and on a {@code null} return, the caller needs
+ * to try as resources. Built-in profiles use {@code .pf} as the file name
+ * extension for profiles, e.g. {@code sRGB.pf}.
*/
private static File getProfileFile(String fileName) {
String path, dir, fullPath;
@@ -1862,10 +1836,9 @@
}
/**
- * Returns a stream corresponding to a built-in profile
- * specified by fileName.
- * If there is no built-in profile with such name, then the method
- * returns null.
+ * Returns a stream corresponding to a built-in profile specified by
+ * fileName. If there is no built-in profile with such name, then the method
+ * returns {@code null}.
*/
private static InputStream getStandardProfileInputStream(String fileName) {
return AccessController.doPrivileged(
@@ -1909,68 +1882,58 @@
});
}
-
/*
* Serialization support.
*
- * Directly deserialized profiles are useless since they are not
- * registered with CMM. We don't allow constructor to be called
- * directly and instead have clients to call one of getInstance
- * factory methods that will register the profile with CMM. For
- * deserialization we implement readResolve method that will
- * resolve the bogus deserialized profile object with one obtained
- * with getInstance as well.
+ * Directly deserialized profiles are useless since they are not registered
+ * with CMM. We don't allow constructor to be called directly and instead
+ * have clients to call one of getInstance factory methods that will
+ * register the profile with CMM. For deserialization we implement
+ * readResolve method that will resolve the bogus deserialized profile
+ * object with one obtained with getInstance as well.
*
- * There are two primary factory methods for construction of ICC
- * profiles: getInstance(int cspace) and getInstance(byte[] data).
- * This implementation of ICC_Profile uses the former to return a
- * cached singleton profile object, other implementations will
- * likely use this technique too. To preserve the singleton
- * pattern across serialization we serialize cached singleton
- * profiles in such a way that deserializing VM could call
- * getInstance(int cspace) method that will resolve deserialized
- * object into the corresponding singleton as well.
+ * There are two primary factory methods for construction of ICC profiles:
+ * getInstance(int cspace) and getInstance(byte[] data). This implementation
+ * of ICC_Profile uses the former to return a cached singleton profile
+ * object, other implementations will likely use this technique too. To
+ * preserve the singleton pattern across serialization we serialize cached
+ * singleton profiles in such a way that deserializing VM could call
+ * getInstance(int cspace) method that will resolve deserialized object into
+ * the corresponding singleton as well.
*
- * Since the singletons are private to ICC_Profile the readResolve
- * method have to be `protected' instead of `private' so that
- * singletons that are instances of subclasses of ICC_Profile
- * could be correctly deserialized.
+ * Since the singletons are private to ICC_Profile the readResolve method
+ * have to be `protected' instead of `private' so that singletons that are
+ * instances of subclasses of ICC_Profile could be correctly deserialized.
*/
-
/**
- * Version of the format of additional serialized data in the
- * stream. Version {@code 1} corresponds to Java 2
- * Platform, v1.3.
+ * Version of the format of additional serialized data in the stream.
+ * Version {@code 1} corresponds to Java 2 Platform, v1.3.
+ *
+ * @serial
* @since 1.3
- * @serial
*/
private int iccProfileSerializedDataVersion = 1;
-
/**
- * Writes default serializable fields to the stream. Writes a
- * string and an array of bytes to the stream as additional data.
+ * Writes default serializable fields to the stream. Writes a string and an
+ * array of bytes to the stream as additional data.
*
- * @param s stream used for serialization.
- * @throws IOException
- * thrown by {@code ObjectInputStream}.
- * @serialData
- * The {@code String} is the name of one of
- * <code>CS_<var>*</var></code> constants defined in the
- * {@link ColorSpace} class if the profile object is a profile
- * for a predefined color space (for example
- * {@code "CS_sRGB"}). The string is {@code null}
- * otherwise.
- * <p>
- * The {@code byte[]} array is the profile data for the
- * profile. For predefined color spaces {@code null} is
- * written instead of the profile data. If in the future
- * versions of Java API new predefined color spaces will be
- * added, future versions of this class may choose to write
- * for new predefined color spaces not only the color space
- * name, but the profile data as well so that older versions
- * could still deserialize the object.
+ * @param s stream used for serialization
+ * @throws IOException thrown by {@code ObjectInputStream}
+ * @serialData the {@code String} is the name of one of
+ * <code>CS_<var>*</var></code> constants defined in the
+ * {@link ColorSpace} class if the profile object is a profile for a
+ * predefined color space (for example {@code "CS_sRGB"}). The
+ * string is {@code null} otherwise.
+ * <p>
+ * The {@code byte[]} array is the profile data for the profile. For
+ * predefined color spaces {@code null} is written instead of the
+ * profile data. If in the future versions of Java API new
+ * predefined color spaces will be added, future versions of this
+ * class may choose to write for new predefined color spaces not
+ * only the color space name, but the profile data as well so that
+ * older versions could still deserialize the object.
*/
private void writeObject(ObjectOutputStream s)
throws IOException
@@ -2009,33 +1972,30 @@
private transient ICC_Profile resolvedDeserializedProfile;
/**
- * Reads default serializable fields from the stream. Reads from
- * the stream a string and an array of bytes as additional data.
+ * Reads default serializable fields from the stream. Reads from the stream
+ * a string and an array of bytes as additional data.
*
- * @param s stream used for deserialization.
- * @throws IOException
- * thrown by {@code ObjectInputStream}.
- * @throws ClassNotFoundException
- * thrown by {@code ObjectInputStream}.
- * @serialData
- * The {@code String} is the name of one of
- * <code>CS_<var>*</var></code> constants defined in the
- * {@link ColorSpace} class if the profile object is a profile
- * for a predefined color space (for example
- * {@code "CS_sRGB"}). The string is {@code null}
- * otherwise.
- * <p>
- * The {@code byte[]} array is the profile data for the
- * profile. It will usually be {@code null} for the
- * predefined profiles.
- * <p>
- * If the string is recognized as a constant name for
- * predefined color space the object will be resolved into
- * profile obtained with
- * <code>getInstance(int cspace)</code> and the profile
- * data are ignored. Otherwise the object will be resolved
- * into profile obtained with
- * <code>getInstance(byte[] data)</code>.
+ * @param s stream used for deserialization
+ * @throws IOException thrown by {@code ObjectInputStream}
+ * @throws ClassNotFoundException thrown by {@code
+ * ObjectInputStream}
+ * @serialData the {@code String} is the name of one of
+ * <code>CS_<var>*</var></code> constants defined in the
+ * {@link ColorSpace} class if the profile object is a profile for a
+ * predefined color space (for example {@code "CS_sRGB"}). The
+ * string is {@code null} otherwise.
+ * <p>
+ * The {@code byte[]} array is the profile data for the profile. It
+ * will usually be {@code null} for the predefined profiles.
+ * <p>
+ * If the string is recognized as a constant name for predefined
+ * color space the object will be resolved into profile obtained
+ * with
+ * <code>getInstance(int cspace)</code> and the profile data
+ * are
+ * ignored. Otherwise the object will be resolved into profile
+ * obtained with
+ * <code>getInstance(byte[] data)</code>.
* @see #readResolve()
* @see #getInstance(int)
* @see #getInstance(byte[])
@@ -2075,11 +2035,11 @@
}
/**
- * Resolves instances being deserialized into instances registered
- * with CMM.
- * @return ICC_Profile object for profile registered with CMM.
- * @throws ObjectStreamException
- * never thrown, but mandated by the serialization spec.
+ * Resolves instances being deserialized into instances registered with CMM.
+ *
+ * @return ICC_Profile object for profile registered with CMM
+ * @throws ObjectStreamException never thrown, but mandated by the
+ * serialization spec
* @since 1.3
*/
protected Object readResolve() throws ObjectStreamException {
--- a/src/java.desktop/share/classes/java/awt/color/ICC_ProfileGray.java Fri Oct 26 15:44:33 2018 +0530
+++ b/src/java.desktop/share/classes/java/awt/color/ICC_ProfileGray.java Mon Oct 29 17:34:05 2018 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2018, 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
@@ -23,8 +23,7 @@
* questions.
*/
-/*
- **********************************************************************
+/* ********************************************************************
**********************************************************************
**********************************************************************
*** COPYRIGHT (c) Eastman Kodak Company, 1997 ***
@@ -40,80 +39,81 @@
import sun.java2d.cmm.ProfileDeferralInfo;
/**
- *
- * A subclass of the ICC_Profile class which represents profiles
- * which meet the following criteria: the color space type of the
- * profile is TYPE_GRAY and the profile includes the grayTRCTag and
- * mediaWhitePointTag tags. Examples of this kind of profile are
- * monochrome input profiles, monochrome display profiles, and
- * monochrome output profiles. The getInstance methods in the
- * ICC_Profile class will
- * return an ICC_ProfileGray object when the above conditions are
- * met. The advantage of this class is that it provides a lookup
- * table that Java or native methods may be able to use directly to
- * optimize color conversion in some cases.
+ * The {@code ICC_ProfileGray} class is a subclass of the {@code ICC_Profile}
+ * class that represents profiles which meet the following criteria: the color
+ * space type of the profile is {@code TYPE_GRAY} and the profile includes the
+ * {@code grayTRCTag} and {@code mediaWhitePointTag} tags. The
+ * {@code getInstance} methods in the {@code ICC_Profile} class will return an
+ * {@code ICC_ProfileGray} object when the above conditions are met. Examples of
+ * this kind of profile are monochrome input profiles, monochrome display
+ * profiles, and monochrome output profiles.
+ * <p>
+ * The advantage of this class is that it provides a lookup table that Java
+ * or native methods can use directly to optimize color conversion in some
+ * cases.
* <p>
* To transform from a GRAY device profile color space to the CIEXYZ Profile
- * Connection Space, the device gray component is transformed by
- * a lookup through the tone reproduction curve (TRC). The result is
- * treated as the achromatic component of the PCS.
-<pre>
-
- PCSY = grayTRC[deviceGray]
-
-</pre>
- * The inverse transform is done by converting the PCS Y components to
- * device Gray via the inverse of the grayTRC.
+ * Connection Space, the device gray component is transformed by a lookup
+ * through the tone reproduction curve (TRC). The result is treated as the
+ * achromatic component of the PCS.
+ * <pre>
+ *
+ * PCSY = grayTRC[deviceGray]
+ *
+ * </pre>
+ * The inverse transform is done by converting the PCS Y components to device
+ * Gray via the inverse of the grayTRC.
*/
-
-
-
public class ICC_ProfileGray
extends ICC_Profile {
+ /**
+ * Use serialVersionUID from JDK 1.2 for interoperability.
+ */
static final long serialVersionUID = -1124721290732002649L;
/**
- * Constructs a new ICC_ProfileGray from a CMM ID.
+ * Constructs a new {@code ICC_ProfileGray} from a CMM ID.
*/
ICC_ProfileGray(Profile p) {
super(p);
}
/**
- * Constructs a new ICC_ProfileGray from a ProfileDeferralInfo object.
+ * Constructs a new {@code ICC_ProfileGray} from a
+ * {@code ProfileDeferralInfo} object.
*/
ICC_ProfileGray(ProfileDeferralInfo pdi) {
super(pdi);
}
-
/**
- * Returns a float array of length 3 containing the X, Y, and Z
- * components of the mediaWhitePointTag in the ICC profile.
- * @return an array containing the components of the
- * mediaWhitePointTag in the ICC profile.
+ * Returns a float array of length 3 containing the X, Y, and Z components
+ * of the mediaWhitePointTag in the ICC profile.
+ *
+ * @return an array containing the components of the mediaWhitePointTag in
+ * the ICC profile
*/
public float[] getMediaWhitePoint() {
return super.getMediaWhitePoint();
}
-
/**
- * Returns a gamma value representing the tone reproduction
- * curve (TRC). If the profile represents the TRC as a table rather
- * than a single gamma value, then an exception is thrown. In this
- * case the actual table can be obtained via getTRC(). When
- * using a gamma value, the PCS Y component is computed as follows:
-<pre>
-
- gamma
- PCSY = deviceGray
-
-</pre>
- * @return the gamma value as a float.
- * @exception ProfileDataException if the profile does not specify
- * the TRC as a single gamma value.
+ * Returns a gamma value representing the tone reproduction curve (TRC). If
+ * the profile represents the TRC as a table rather than a single gamma
+ * value, then an exception is thrown. In this case the actual table can be
+ * obtained via {@code getTRC()}. When using a gamma value, the PCS Y
+ * component is computed as follows:
+ * <pre>
+ *
+ * gamma
+ * PCSY = deviceGray
+ *
+ * </pre>
+ *
+ * @return the gamma value as a float
+ * @throws ProfileDataException if the profile does not specify the TRC as a
+ * single gamma value
*/
public float getGamma() {
float theGamma;
@@ -123,22 +123,22 @@
}
/**
- * Returns the TRC as an array of shorts. If the profile has
- * specified the TRC as linear (gamma = 1.0) or as a simple gamma
- * value, this method throws an exception, and the getGamma() method
- * should be used to get the gamma value. Otherwise the short array
- * returned here represents a lookup table where the input Gray value
- * is conceptually in the range [0.0, 1.0]. Value 0.0 maps
- * to array index 0 and value 1.0 maps to array index length-1.
- * Interpolation may be used to generate output values for
- * input values which do not map exactly to an index in the
- * array. Output values also map linearly to the range [0.0, 1.0].
- * Value 0.0 is represented by an array value of 0x0000 and
- * value 1.0 by 0xFFFF, i.e. the values are really unsigned
- * short values, although they are returned in a short array.
- * @return a short array representing the TRC.
- * @exception ProfileDataException if the profile does not specify
- * the TRC as a table.
+ * Returns the TRC as an array of shorts. If the profile has specified the
+ * TRC as linear (gamma = 1.0) or as a simple gamma value, this method
+ * throws an exception, and the {@code getGamma()} method should be used to
+ * get the gamma value. Otherwise the short array returned here represents a
+ * lookup table where the input Gray value is conceptually in the range
+ * [0.0, 1.0]. Value 0.0 maps to array index 0 and value 1.0 maps to array
+ * index {@code length-1}. Interpolation may be used to generate output
+ * values for input values which do not map exactly to an index in the
+ * array. Output values also map linearly to the range [0.0, 1.0]. Value 0.0
+ * is represented by an array value of 0x0000 and value 1.0 by 0xFFFF, i.e.
+ * the values are really unsigned short values, although they are returned
+ * in a short array.
+ *
+ * @return a short array representing the TRC
+ * @throws ProfileDataException if the profile does not specify the TRC as a
+ * table
*/
public short[] getTRC() {
short[] theTRC;
--- a/src/java.desktop/share/classes/java/awt/color/ICC_ProfileRGB.java Fri Oct 26 15:44:33 2018 +0530
+++ b/src/java.desktop/share/classes/java/awt/color/ICC_ProfileRGB.java Mon Oct 29 17:34:05 2018 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2018, 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
@@ -23,8 +23,7 @@
* questions.
*/
-/*
- **********************************************************************
+/* ********************************************************************
**********************************************************************
**********************************************************************
*** COPYRIGHT (c) Eastman Kodak Company, 1997 ***
@@ -40,30 +39,25 @@
import sun.java2d.cmm.ProfileDeferralInfo;
/**
- *
- * The ICC_ProfileRGB class is a subclass of the ICC_Profile class
- * that represents profiles which meet the following criteria:
- * <ul>
- * <li>The profile's color space type is RGB.</li>
- * <li>The profile includes the {@code redColorantTag},
- * {@code greenColorantTag}, {@code blueColorantTag},
- * {@code redTRCTag}, {@code greenTRCTag},
- * {@code blueTRCTag}, and {@code mediaWhitePointTag} tags.</li>
- * </ul>
- * The {@code ICC_Profile getInstance} method will
- * return an {@code ICC_ProfileRGB} object when these conditions are met.
- * Three-component, matrix-based input profiles and RGB display profiles are
- * examples of this type of profile.
+ * The {@code ICC_ProfileRGB} class is a subclass of the {@code ICC_Profile}
+ * class that represents profiles which meet the following criteria: the
+ * profile's color space type is RGB, and the profile includes the
+ * {@code redColorantTag}, {@code greenColorantTag}, {@code blueColorantTag},
+ * {@code redTRCTag}, {@code greenTRCTag}, {@code blueTRCTag},
+ * {@code mediaWhitePointTag} tags. The {@code getInstance} methods in the
+ * {@code ICC_Profile} class will return an {@code ICC_ProfileRGB} object when
+ * the above conditions are met. Three-component, matrix-based input profiles
+ * and RGB display profiles are examples of this type of profile.
* <p>
- * This profile class provides color transform matrices and lookup tables
- * that Java or native methods can use directly to
- * optimize color conversion in some cases.
+ * The advantage of this class is that it provides color transform matrices and
+ * lookup tables that Java or native methods can use directly to optimize color
+ * conversion in some cases.
* <p>
* To transform from a device profile color space to the CIEXYZ Profile
- * Connection Space, each device color component is first linearized by
- * a lookup through the corresponding tone reproduction curve (TRC).
- * The resulting linear RGB components are converted to the CIEXYZ PCS
- * using a a 3x3 matrix constructed from the RGB colorants.
+ * Connection Space, each device color component is first linearized by a lookup
+ * through the corresponding tone reproduction curve (TRC). The resulting linear
+ * RGB components are converted to the CIEXYZ PCS using a a 3x3 matrix
+ * constructed from the RGB colorants.
* <pre>
*
* linearR = redTRC[deviceR]
@@ -81,12 +75,9 @@
*
* </pre>
* The inverse transform is performed by converting PCS XYZ components to linear
- * RGB components through the inverse of the above 3x3 matrix, and then converting
- * linear RGB to device RGB through inverses of the TRCs.
+ * RGB components through the inverse of the above 3x3 matrix, and then
+ * converting linear RGB to device RGB through inverses of the TRCs.
*/
-
-
-
public class ICC_ProfileRGB
extends ICC_Profile {
@@ -107,12 +98,10 @@
*/
public static final int BLUECOMPONENT = 2;
-
/**
* Constructs an new {@code ICC_ProfileRGB} from a CMM ID.
*
- * @param p The CMM ID for the profile.
- *
+ * @param p the CMM ID for the profile.
*/
ICC_ProfileRGB(Profile p) {
super(p);
@@ -120,7 +109,7 @@
/**
* Constructs a new {@code ICC_ProfileRGB} from a
- * ProfileDeferralInfo object.
+ * {@code ProfileDeferralInfo} object.
*
* @param pdi
*/
@@ -128,31 +117,28 @@
super(pdi);
}
-
/**
* Returns an array that contains the components of the profile's
* {@code mediaWhitePointTag}.
*
- * @return A 3-element {@code float} array containing the x, y,
- * and z components of the profile's {@code mediaWhitePointTag}.
+ * @return a 3-element {@code float} array containing the x, y, and z
+ * components of the profile's {@code mediaWhitePointTag}
*/
public float[] getMediaWhitePoint() {
return super.getMediaWhitePoint();
}
-
/**
- * Returns a 3x3 {@code float} matrix constructed from the
- * X, Y, and Z components of the profile's {@code redColorantTag},
+ * Returns a 3x3 {@code float} matrix constructed from the X, Y, and Z
+ * components of the profile's {@code redColorantTag},
* {@code greenColorantTag}, and {@code blueColorantTag}.
* <p>
- * This matrix can be used for color transforms in the forward
- * direction of the profile--from the profile color space
- * to the CIEXYZ PCS.
+ * This matrix can be used for color transforms in the forward direction of
+ * the profile--from the profile color space to the CIEXYZ PCS.
*
- * @return A 3x3 {@code float} array that contains the x, y, and z
- * components of the profile's {@code redColorantTag},
- * {@code greenColorantTag}, and {@code blueColorantTag}.
+ * @return a 3x3 {@code float} array that contains the x, y, and z
+ * components of the profile's {@code redColorantTag},
+ * {@code greenColorantTag}, and {@code blueColorantTag}
*/
public float[][] getMatrix() {
float[][] theMatrix = new float[3][3];
@@ -174,28 +160,27 @@
}
/**
- * Returns a gamma value representing the tone reproduction curve
- * (TRC) for a particular component. The component parameter
- * must be one of REDCOMPONENT, GREENCOMPONENT, or BLUECOMPONENT.
+ * Returns a gamma value representing the tone reproduction curve (TRC) for
+ * a particular component. The component parameter must be one of
+ * {@code REDCOMPONENT}, {@code GREENCOMPONENT}, or {@code BLUECOMPONENT}.
* <p>
- * If the profile
- * represents the TRC for the corresponding component
- * as a table rather than a single gamma value, an
- * exception is thrown. In this case the actual table
- * can be obtained through the {@link #getTRC(int)} method.
- * When using a gamma value,
- * the linear component (R, G, or B) is computed as follows:
+ * If the profile represents the TRC for the corresponding component as a
+ * table rather than a single gamma value, an exception is thrown. In this
+ * case the actual table can be obtained through the {@link #getTRC(int)}
+ * method. When using a gamma value, the linear component (R, G, or B) is
+ * computed as follows:
* <pre>
*
* gamma
* linearComponent = deviceComponent
*
- *</pre>
- * @param component The {@code ICC_ProfileRGB} constant that
- * represents the component whose TRC you want to retrieve
- * @return the gamma value as a float.
- * @exception ProfileDataException if the profile does not specify
- * the corresponding TRC as a single gamma value.
+ * </pre>
+ *
+ * @param component the {@code ICC_ProfileRGB} constant that represents the
+ * component whose TRC you want to retrieve
+ * @return the gamma value as a float
+ * @throws ProfileDataException if the profile does not specify the
+ * corresponding TRC as a single gamma value
*/
public float getGamma(int component) {
float theGamma;
@@ -224,34 +209,29 @@
}
/**
- * Returns the TRC for a particular component as an array.
- * Component must be {@code REDCOMPONENT},
- * {@code GREENCOMPONENT}, or {@code BLUECOMPONENT}.
- * Otherwise the returned array
- * represents a lookup table where the input component value
- * is conceptually in the range [0.0, 1.0]. Value 0.0 maps
- * to array index 0 and value 1.0 maps to array index length-1.
- * Interpolation might be used to generate output values for
- * input values that do not map exactly to an index in the
- * array. Output values also map linearly to the range [0.0, 1.0].
- * Value 0.0 is represented by an array value of 0x0000 and
- * value 1.0 by 0xFFFF. In other words, the values are really unsigned
- * {@code short} values even though they are returned in a
+ * Returns the TRC for a particular component as an array. Component must be
+ * {@code REDCOMPONENT}, {@code GREENCOMPONENT}, or {@code BLUECOMPONENT}.
+ * Otherwise the returned array represents a lookup table where the input
+ * component value is conceptually in the range [0.0, 1.0]. Value 0.0 maps
+ * to array index 0 and value 1.0 maps to array index {@code length-1}.
+ * Interpolation might be used to generate output values for input values
+ * that do not map exactly to an index in the array. Output values also map
+ * linearly to the range [0.0, 1.0]. Value 0.0 is represented by an array
+ * value of 0x0000 and value 1.0 by 0xFFFF. In other words, the values are
+ * really unsigned {@code short} values even though they are returned in a
* {@code short} array.
- *
- * If the profile has specified the corresponding TRC
- * as linear (gamma = 1.0) or as a simple gamma value, this method
- * throws an exception. In this case, the {@link #getGamma(int)}
- * method should be used to get the gamma value.
+ * <p>
+ * If the profile has specified the corresponding TRC as linear (gamma =
+ * 1.0) or as a simple gamma value, this method throws an exception. In this
+ * case, the {@link #getGamma(int)} method should be used to get the gamma
+ * value.
*
- * @param component The {@code ICC_ProfileRGB} constant that
- * represents the component whose TRC you want to retrieve:
- * {@code REDCOMPONENT}, {@code GREENCOMPONENT}, or
- * {@code BLUECOMPONENT}.
- *
- * @return a short array representing the TRC.
- * @exception ProfileDataException if the profile does not specify
- * the corresponding TRC as a table.
+ * @param component the {@code ICC_ProfileRGB} constant that represents the
+ * component whose TRC you want to retrieve: {@code REDCOMPONENT},
+ * {@code GREENCOMPONENT}, or {@code BLUECOMPONENT}
+ * @return a short array representing the TRC
+ * @throws ProfileDataException if the profile does not specify the
+ * corresponding TRC as a table
*/
public short[] getTRC(int component) {
short[] theTRC;
--- a/src/java.desktop/share/classes/java/awt/color/ProfileDataException.java Fri Oct 26 15:44:33 2018 +0530
+++ b/src/java.desktop/share/classes/java/awt/color/ProfileDataException.java Mon Oct 29 17:34:05 2018 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2018, 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
@@ -26,18 +26,23 @@
package java.awt.color;
/**
- * This exception is thrown when an error occurs in accessing or
- * processing an ICC_Profile object.
+ * This exception is thrown when an error occurs in accessing or processing an
+ * {@code ICC_Profile} object.
*/
+public class ProfileDataException extends java.lang.RuntimeException {
-public class ProfileDataException extends java.lang.RuntimeException {
+ /**
+ * Use serialVersionUID from JDK 1.2 for interoperability.
+ */
private static final long serialVersionUID = 7286140888240322498L;
/**
- * Constructs a ProfileDataException with the specified detail message.
- * @param s the specified detail message
+ * Constructs a {@code ProfileDataException} with the specified detail
+ * message.
+ *
+ * @param s the specified detail message
*/
public ProfileDataException(String s) {
- super (s);
+ super(s);
}
}