8212790: Javadoc cleanup of java.awt.color package
Reviewed-by: prr, kaddepalli
This commit is contained in:
parent
7f642e200b
commit
b6be5030eb
@ -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);
|
||||
}
|
||||
}
|
||||
|
@ -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>
|
||||
|
||||
CIEXYZ
|
||||
viewing illuminance: 200 lux
|
||||
viewing white point: CIE D50
|
||||
media white point: "that of a perfectly reflecting diffuser" -- D50
|
||||
media black point: 0 lux or 0 Reflectance
|
||||
flare: 1 percent
|
||||
surround: 20percent of the media white point
|
||||
media description: reflection print (i.e., RLAB, Hunt viewing media)
|
||||
note: For developers creating an ICC profile for this conversion
|
||||
space, the following is applicable. Use a simple Von Kries
|
||||
white point adaptation folded into the 3X3 matrix parameters
|
||||
and fold the flare and surround effects into the three
|
||||
one-dimensional lookup tables (assuming one uses the minimal
|
||||
model for monitors).
|
||||
|
||||
</pre>
|
||||
* The {@code CS_CIEXYZ} space used by the {@code toCIEXYZ/fromCIEXYZ} methods
|
||||
* can be described as follows:
|
||||
* <pre>
|
||||
*
|
||||
* CIEXYZ
|
||||
* viewing illuminance: 200 lux
|
||||
* viewing white point: CIE D50
|
||||
* media white point: "that of a perfectly reflecting diffuser" -- D50
|
||||
* media black point: 0 lux or 0 Reflectance
|
||||
* flare: 1 percent
|
||||
* surround: 20percent of the media white point
|
||||
* media description: reflection print (i.e., RLAB, Hunt viewing media)
|
||||
* note: For developers creating an ICC profile for this conversion
|
||||
* space, the following is applicable. Use a simple Von Kries
|
||||
* white point adaptation folded into the 3X3 matrix parameters
|
||||
* and fold the flare and surround effects into the three
|
||||
* one-dimensional lookup tables (assuming one uses the minimal
|
||||
* model for monitors).
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
* @see ICC_ColorSpace
|
||||
*/
|
||||
|
||||
public abstract class ColorSpace implements java.io.Serializable {
|
||||
|
||||
static final long serialVersionUID = -409452704308689724L;
|
||||
@ -237,15 +233,14 @@ 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);
|
||||
|
@ -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) {
|
||||
|
@ -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 {@code 1} corresponds to Java 2
|
||||
* Platform, v1.3.
|
||||
* @since 1.3
|
||||
* Version of the format of additional serialized data in the stream.
|
||||
* Version {@code 1} corresponds to Java 2 Platform, v1.3.
|
||||
*
|
||||
* @serial
|
||||
* @since 1.3
|
||||
*/
|
||||
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 cspace)</code> and the profile
|
||||
* data are ignored. Otherwise the object will be resolved
|
||||
* into profile obtained with
|
||||
* <code>getInstance(byte[] data)</code>.
|
||||
* @param s stream used for deserialization
|
||||
* @throws IOException thrown by {@code ObjectInputStream}
|
||||
* @throws ClassNotFoundException thrown by {@code
|
||||
* ObjectInputStream}
|
||||
* @serialData the {@code String} is the name of one of
|
||||
* <code>CS_<var>*</var></code> constants defined in the
|
||||
* {@link ColorSpace} class if the profile object is a profile for a
|
||||
* predefined color space (for example {@code "CS_sRGB"}). The
|
||||
* string is {@code null} otherwise.
|
||||
* <p>
|
||||
* The {@code byte[]} array is the profile data for the profile. It
|
||||
* will usually be {@code null} for the predefined profiles.
|
||||
* <p>
|
||||
* If the string is recognized as a constant name for predefined
|
||||
* color space the object will be resolved into profile obtained
|
||||
* with
|
||||
* <code>getInstance(int cspace)</code> and the profile data
|
||||
* are
|
||||
* ignored. Otherwise the object will be resolved into profile
|
||||
* obtained with
|
||||
* <code>getInstance(byte[] data)</code>.
|
||||
* @see #readResolve()
|
||||
* @see #getInstance(int)
|
||||
* @see #getInstance(byte[])
|
||||
@ -2075,11 +2035,11 @@ 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 {
|
||||
|
@ -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>
|
||||
|
||||
PCSY = grayTRC[deviceGray]
|
||||
|
||||
</pre>
|
||||
* The inverse transform is done by converting the PCS Y components to
|
||||
* device Gray via the inverse of the grayTRC.
|
||||
* Connection Space, the device gray component is transformed by a lookup
|
||||
* through the tone reproduction curve (TRC). The result is treated as the
|
||||
* achromatic component of the PCS.
|
||||
* <pre>
|
||||
*
|
||||
* PCSY = grayTRC[deviceGray]
|
||||
*
|
||||
* </pre>
|
||||
* The inverse transform is done by converting the PCS Y components to device
|
||||
* Gray via the inverse of the grayTRC.
|
||||
*/
|
||||
|
||||
|
||||
|
||||
public class ICC_ProfileGray
|
||||
extends ICC_Profile {
|
||||
|
||||
/**
|
||||
* Use serialVersionUID from JDK 1.2 for interoperability.
|
||||
*/
|
||||
static final long serialVersionUID = -1124721290732002649L;
|
||||
|
||||
/**
|
||||
* Constructs a new ICC_ProfileGray from a CMM ID.
|
||||
* Constructs a new {@code ICC_ProfileGray} from a CMM ID.
|
||||
*/
|
||||
ICC_ProfileGray(Profile p) {
|
||||
super(p);
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructs a new ICC_ProfileGray from a ProfileDeferralInfo object.
|
||||
* Constructs a new {@code ICC_ProfileGray} from a
|
||||
* {@code ProfileDeferralInfo} object.
|
||||
*/
|
||||
ICC_ProfileGray(ProfileDeferralInfo pdi) {
|
||||
super(pdi);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Returns a float array of length 3 containing the X, Y, and Z
|
||||
* components of the mediaWhitePointTag in the ICC profile.
|
||||
* @return an array containing the components of the
|
||||
* mediaWhitePointTag in the ICC profile.
|
||||
* Returns a float array of length 3 containing the X, Y, and Z components
|
||||
* of the mediaWhitePointTag in the ICC profile.
|
||||
*
|
||||
* @return an array containing the components of the mediaWhitePointTag in
|
||||
* the ICC profile
|
||||
*/
|
||||
public float[] getMediaWhitePoint() {
|
||||
return super.getMediaWhitePoint();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Returns a gamma value representing the tone reproduction
|
||||
* curve (TRC). If the profile represents the TRC as a table rather
|
||||
* than a single gamma value, then an exception is thrown. In this
|
||||
* case the actual table can be obtained via getTRC(). When
|
||||
* using a gamma value, the PCS Y component is computed as follows:
|
||||
<pre>
|
||||
|
||||
gamma
|
||||
PCSY = deviceGray
|
||||
|
||||
</pre>
|
||||
* @return the gamma value as a float.
|
||||
* @exception ProfileDataException if the profile does not specify
|
||||
* the TRC as a single gamma value.
|
||||
* Returns a gamma value representing the tone reproduction curve (TRC). If
|
||||
* the profile represents the TRC as a table rather than a single gamma
|
||||
* value, then an exception is thrown. In this case the actual table can be
|
||||
* obtained via {@code getTRC()}. When using a gamma value, the PCS Y
|
||||
* component is computed as follows:
|
||||
* <pre>
|
||||
*
|
||||
* gamma
|
||||
* PCSY = deviceGray
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
* @return the gamma value as a float
|
||||
* @throws ProfileDataException if the profile does not specify the TRC as a
|
||||
* single gamma value
|
||||
*/
|
||||
public float getGamma() {
|
||||
float theGamma;
|
||||
@ -123,22 +123,22 @@ 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;
|
||||
|
@ -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>
|
||||
*
|
||||
* 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>
|
||||
*
|
||||
* gamma
|
||||
* linearComponent = deviceComponent
|
||||
*
|
||||
*</pre>
|
||||
* @param component The {@code ICC_ProfileRGB} constant that
|
||||
* represents the component whose TRC you want to retrieve
|
||||
* @return the gamma value as a float.
|
||||
* @exception ProfileDataException if the profile does not specify
|
||||
* the corresponding TRC as a single gamma value.
|
||||
* </pre>
|
||||
*
|
||||
* @param component the {@code ICC_ProfileRGB} constant that represents the
|
||||
* component whose TRC you want to retrieve
|
||||
* @return the gamma value as a float
|
||||
* @throws ProfileDataException if the profile does not specify the
|
||||
* corresponding TRC as a single gamma value
|
||||
*/
|
||||
public float getGamma(int component) {
|
||||
float theGamma;
|
||||
@ -224,34 +209,29 @@ 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;
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user