8212790: Javadoc cleanup of java.awt.color package

Reviewed-by: prr, kaddepalli
This commit is contained in:
Sergey Bylokhov 2018-10-29 17:34:05 -07:00
parent 7f642e200b
commit b6be5030eb
7 changed files with 844 additions and 935 deletions

View File

@ -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 {
/**
* 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);
}
}

View File

@ -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 @@ package java.awt.color;
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>
&nbsp; CIEXYZ
&nbsp; viewing illuminance: 200 lux
&nbsp; viewing white point: CIE D50
&nbsp; media white point: "that of a perfectly reflecting diffuser" -- D50
&nbsp; media black point: 0 lux or 0 Reflectance
&nbsp; flare: 1 percent
&nbsp; surround: 20percent of the media white point
&nbsp; media description: reflection print (i.e., RLAB, Hunt viewing media)
&nbsp; note: For developers creating an ICC profile for this conversion
&nbsp; space, the following is applicable. Use a simple Von Kries
&nbsp; white point adaptation folded into the 3X3 matrix parameters
&nbsp; and fold the flare and surround effects into the three
&nbsp; one-dimensional lookup tables (assuming one uses the minimal
&nbsp; model for monitors).
</pre>
* The {@code CS_CIEXYZ} space used by the {@code toCIEXYZ/fromCIEXYZ} methods
* can be described as follows:
* <pre>
*
* &nbsp; CIEXYZ
* &nbsp; viewing illuminance: 200 lux
* &nbsp; viewing white point: CIE D50
* &nbsp; media white point: "that of a perfectly reflecting diffuser" -- D50
* &nbsp; media black point: 0 lux or 0 Reflectance
* &nbsp; flare: 1 percent
* &nbsp; surround: 20percent of the media white point
* &nbsp; media description: reflection print (i.e., RLAB, Hunt viewing media)
* &nbsp; note: For developers creating an ICC profile for this conversion
* &nbsp; space, the following is applicable. Use a simple Von Kries
* &nbsp; white point adaptation folded into the 3X3 matrix parameters
* &nbsp; and fold the flare and surround effects into the three
* &nbsp; one-dimensional lookup tables (assuming one uses the minimal
* &nbsp; model for monitors).
*
* </pre>
*
* @see ICC_ColorSpace
*/
public abstract class ColorSpace implements java.io.Serializable {
static final long serialVersionUID = -409452704308689724L;
@ -237,15 +233,14 @@ public abstract class ColorSpace implements java.io.Serializable {
/**
* 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 @@ public abstract class ColorSpace implements java.io.Serializable {
*/
@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 @@ public abstract class ColorSpace implements java.io.Serializable {
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 @@ public abstract class ColorSpace implements java.io.Serializable {
}
/**
* 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 @@ public abstract class ColorSpace implements java.io.Serializable {
/**
* 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 @@ public abstract class ColorSpace implements java.io.Serializable {
/**
* 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 @@ public abstract class ColorSpace implements java.io.Serializable {
}
/**
* 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 @@ public abstract class ColorSpace implements java.io.Serializable {
}
/**
* 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 @@ public abstract class ColorSpace implements java.io.Serializable {
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);

View File

@ -23,8 +23,7 @@
* questions.
*/
/*
**********************************************************************
/* ********************************************************************
**********************************************************************
**********************************************************************
*** COPYRIGHT (c) Eastman Kodak Company, 1997 ***
@ -36,54 +35,46 @@
package java.awt.color;
import sun.java2d.cmm.ColorTransform;
import sun.java2d.cmm.CMSManager;
import sun.java2d.cmm.ColorTransform;
import sun.java2d.cmm.PCMM;
/**
* 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 {@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 {@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 {@link ColorSpace#getInstance}.
*
* 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>).
* <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.
* <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.
* <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().
* @see ColorSpace
* @see ICC_Profile
*/
public class ICC_ColorSpace extends ColorSpace {
static final long serialVersionUID = 3455889114070431483L;
@ -101,13 +92,14 @@ public class ICC_ColorSpace extends ColorSpace {
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 @@ public class ICC_ColorSpace extends ColorSpace {
}
/**
* 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 @@ public class ICC_ColorSpace extends ColorSpace {
}
/**
* 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 @@ public class ICC_ColorSpace extends ColorSpace {
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 @@ public class ICC_ColorSpace extends ColorSpace {
*
* </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 @@ public class ICC_ColorSpace extends ColorSpace {
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 @@ public class ICC_ColorSpace extends ColorSpace {
*
* </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 @@ public class ICC_ColorSpace extends ColorSpace {
}
/**
* 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 @@ public class ICC_ColorSpace extends ColorSpace {
}
/**
* 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) {

View File

@ -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.ObjectOutputStream;
import java.io.ObjectStreamException;
import java.io.OutputStream;
import java.io.Serializable;
import java.util.StringTokenizer;
import java.security.AccessController;
import java.security.PrivilegedAction;
import java.util.StringTokenizer;
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 @@ public class ICC_Profile implements Serializable {
private static ICC_Profile GRAYprofile;
private static ICC_Profile LINEAR_RGBprofile;
/**
* Profile class is input.
*/
@ -146,7 +136,6 @@ public class ICC_Profile implements Serializable {
*/
public static final int CLASS_NAMEDCOLOR = 6;
/**
* ICC Profile Color Space Type Signature: 'XYZ '.
*/
@ -321,6 +310,7 @@ public class ICC_Profile implements Serializable {
/**
* ICC Profile Rendering Intent: Media-RelativeColorimetric.
*
* @since 1.5
*/
public static final int icMediaRelativeColorimetric = 1;
@ -337,6 +327,7 @@ public class ICC_Profile implements Serializable {
/**
* ICC Profile Rendering Intent: ICC-AbsoluteColorimetric.
*
* @since 1.5
*/
public static final int icICCAbsoluteColorimetric = 3;
@ -369,6 +360,7 @@ public class ICC_Profile implements Serializable {
/**
* ICC Profile Tag Signature: 'bXYZ'.
*
* @since 1.5
*/
public static final int icSigBlueMatrixColumnTag = 0x6258595A; /* 'bXYZ' */
@ -446,6 +438,7 @@ public class ICC_Profile implements Serializable {
/**
* ICC Profile Tag Signature: 'gXYZ'.
*
* @since 1.5
*/
public static final int icSigGreenMatrixColumnTag = 0x6758595A;/* 'gXYZ' */
@ -550,6 +543,7 @@ public class ICC_Profile implements Serializable {
/**
* ICC Profile Tag Signature: 'rXYZ'.
*
* @since 1.5
*/
public static final int icSigRedMatrixColumnTag = 0x7258595A; /* 'rXYZ' */
@ -596,18 +590,21 @@ public class ICC_Profile implements Serializable {
/**
* 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 @@ public class ICC_Profile implements Serializable {
/**
* ICC Profile Header Location: profile's ID.
*
* @since 1.5
*/
public static final int icHdrProfileID = 84; /* Profile's ID */
@ -727,15 +725,14 @@ public class ICC_Profile implements Serializable {
/**
* 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 @@ public class ICC_Profile implements Serializable {
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 @@ public class ICC_Profile implements Serializable {
}
}
/**
* 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 @@ public class ICC_Profile implements Serializable {
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 @@ public class ICC_Profile implements Serializable {
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 @@ public class ICC_Profile implements Serializable {
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 @@ public class ICC_Profile implements Serializable {
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 @@ public class ICC_Profile implements Serializable {
}
}
/**
* 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 @@ public class ICC_Profile implements Serializable {
/**
* 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 @@ public class ICC_Profile implements Serializable {
/**
* 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 @@ public class ICC_Profile implements Serializable {
}
/**
* 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 @@ public class ICC_Profile implements Serializable {
/**
* 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 @@ public class ICC_Profile implements Serializable {
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 @@ public class ICC_Profile implements Serializable {
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 @@ public class ICC_Profile implements Serializable {
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 @@ public class ICC_Profile implements Serializable {
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 @@ public class ICC_Profile implements Serializable {
}
/**
* 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 @@ public class ICC_Profile implements Serializable {
}
/**
* 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 @@ public class ICC_Profile implements Serializable {
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 @@ public class ICC_Profile implements Serializable {
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 @@ public class ICC_Profile implements Serializable {
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 @@ public class ICC_Profile implements Serializable {
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 @@ public class ICC_Profile implements Serializable {
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 @@ public class ICC_Profile implements Serializable {
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 @@ public class ICC_Profile implements Serializable {
default:
throw new IllegalArgumentException ("Unknown color space");
}
return theColorSpace;
}
@ -1807,17 +1782,16 @@ public class ICC_Profile implements Serializable {
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 @@ public class ICC_Profile implements Serializable {
}
/**
* 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 @@ public class ICC_Profile implements Serializable {
});
}
/*
* 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&nbsp;{@code 1} corresponds to Java&nbsp;2
* Platform,&nbsp;v1.3.
* @since 1.3
* Version of the format of additional serialized data in the stream.
* Version&nbsp;{@code 1} corresponds to Java&nbsp;2 Platform,&nbsp;v1.3.
*
* @serial
* @since 1.3
*/
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 @@ public class ICC_Profile implements Serializable {
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&nbsp;cspace)</code> and the profile
* data are ignored. Otherwise the object will be resolved
* into profile obtained with
* <code>getInstance(byte[]&nbsp;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&nbsp;cspace)</code> and the profile data
* are
* ignored. Otherwise the object will be resolved into profile
* obtained with
* <code>getInstance(byte[]&nbsp;data)</code>.
* @see #readResolve()
* @see #getInstance(int)
* @see #getInstance(byte[])
@ -2075,11 +2035,11 @@ public class ICC_Profile implements Serializable {
}
/**
* 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 {

View File

@ -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.Profile;
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>
&nbsp; 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>
*
* &nbsp; 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>
&nbsp; gamma
&nbsp; 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>
*
* &nbsp; gamma
* &nbsp; 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 @@ extends ICC_Profile {
}
/**
* 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;

View File

@ -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.Profile;
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>
*
* &nbsp; linearR = redTRC[deviceR]
@ -81,12 +75,9 @@ import sun.java2d.cmm.ProfileDeferralInfo;
*
* </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 @@ extends ICC_Profile {
*/
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 @@ extends ICC_Profile {
/**
* Constructs a new {@code ICC_ProfileRGB} from a
* ProfileDeferralInfo object.
* {@code ProfileDeferralInfo} object.
*
* @param pdi
*/
@ -128,31 +117,28 @@ extends ICC_Profile {
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},
* {@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.
*
* @return A 3x3 {@code float} array that contains the x, y, and z
* 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.
*
* @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 @@ extends ICC_Profile {
}
/**
* 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>
*
* &nbsp; gamma
* &nbsp; 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 @@ extends ICC_Profile {
}
/**
* 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.
* <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.
*
* 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;

View File

@ -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 {
/**
* 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);
}
}