--- old/src/java.desktop/share/classes/java/awt/color/ICC_Profile.java 2018-10-22 16:02:44.000000000 -0700
+++ new/src/java.desktop/share/classes/java/awt/color/ICC_Profile.java 2018-10-22 16:02:43.000000000 -0700
@@ -23,8 +23,7 @@
* questions.
*/
-/*
- **********************************************************************
+/* ********************************************************************
**********************************************************************
**********************************************************************
*** COPYRIGHT (c) Eastman Kodak Company, 1997 ***
@@ -36,17 +35,8 @@
package java.awt.color;
-import sun.java2d.cmm.PCMM;
-import sun.java2d.cmm.CMSManager;
-import sun.java2d.cmm.Profile;
-import sun.java2d.cmm.ProfileDataVerifier;
-import sun.java2d.cmm.ProfileDeferralMgr;
-import sun.java2d.cmm.ProfileDeferralInfo;
-import sun.java2d.cmm.ProfileActivator;
-
import java.io.File;
import java.io.FileInputStream;
-import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FilePermission;
import java.io.IOException;
@@ -56,42 +46,43 @@
import java.io.ObjectStreamException;
import java.io.OutputStream;
import java.io.Serializable;
-
-import java.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 http://www.color.org).
+ * 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
+ * http://www.color.org).
*
- * 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).
*
- * ICC Profiles represent transformations from the color space of
- * the profile (e.g. a monitor) to a Profile Connection Space (PCS).
- * Profiles of interest for tagging images or colors have a PCS
- * which is one of the two specific device independent
- * spaces (one CIEXYZ space and one CIELab space) defined in the
- * ICC Profile Format Specification. Most profiles of interest
- * either have invertible transformations or explicitly specify
- * transformations going both directions.
+ * ICC Profiles represent transformations from the color space of the profile
+ * (e.g. a monitor) to a Profile Connection Space (PCS). Profiles of interest
+ * for tagging images or colors have a PCS which is one of the two specific
+ * device independent spaces (one CIEXYZ space and one CIELab space) defined in
+ * the ICC Profile Format Specification. Most profiles of interest either have
+ * invertible transformations or explicitly specify transformations going both
+ * directions.
+ *
* @see ICC_ColorSpace
*/
-
-
public class ICC_Profile implements Serializable {
private static final long serialVersionUID = -3938515861990936766L;
@@ -110,7 +101,6 @@
private static ICC_Profile GRAYprofile;
private static ICC_Profile LINEAR_RGBprofile;
-
/**
* Profile class is input.
*/
@@ -146,7 +136,6 @@
*/
public static final int CLASS_NAMEDCOLOR = 6;
-
/**
* ICC Profile Color Space Type Signature: 'XYZ '.
*/
@@ -321,6 +310,7 @@
/**
* ICC Profile Rendering Intent: Media-RelativeColorimetric.
+ *
* @since 1.5
*/
public static final int icMediaRelativeColorimetric = 1;
@@ -337,6 +327,7 @@
/**
* ICC Profile Rendering Intent: ICC-AbsoluteColorimetric.
+ *
* @since 1.5
*/
public static final int icICCAbsoluteColorimetric = 3;
@@ -369,6 +360,7 @@
/**
* ICC Profile Tag Signature: 'bXYZ'.
+ *
* @since 1.5
*/
public static final int icSigBlueMatrixColumnTag = 0x6258595A; /* 'bXYZ' */
@@ -446,6 +438,7 @@
/**
* ICC Profile Tag Signature: 'gXYZ'.
+ *
* @since 1.5
*/
public static final int icSigGreenMatrixColumnTag = 0x6758595A;/* 'gXYZ' */
@@ -550,6 +543,7 @@
/**
* ICC Profile Tag Signature: 'rXYZ'.
+ *
* @since 1.5
*/
public static final int icSigRedMatrixColumnTag = 0x7258595A; /* 'rXYZ' */
@@ -596,18 +590,21 @@
/**
* ICC Profile Tag Signature: 'chad'.
+ *
* @since 1.5
*/
public static final int icSigChromaticAdaptationTag = 0x63686164;/* 'chad' */
/**
* ICC Profile Tag Signature: 'clro'.
+ *
* @since 1.5
*/
public static final int icSigColorantOrderTag = 0x636C726F; /* 'clro' */
/**
* ICC Profile Tag Signature: 'clrt'.
+ *
* @since 1.5
*/
public static final int icSigColorantTableTag = 0x636C7274; /* 'clrt' */
@@ -695,6 +692,7 @@
/**
* ICC Profile Header Location: profile's ID.
+ *
* @since 1.5
*/
public static final int icHdrProfileID = 84; /* Profile's ID */
@@ -727,15 +725,14 @@
/**
- * Constructs an ICC_Profile object with a given ID.
+ * Constructs an {@code ICC_Profile} object with a given ID.
*/
ICC_Profile(Profile p) {
this.cmmProfile = p;
}
-
/**
- * Constructs an ICC_Profile object whose loading will be deferred.
+ * Constructs an {@code ICC_Profile} object whose loading will be deferred.
* The ID will be 0 until the profile is loaded.
*/
ICC_Profile(ProfileDeferralInfo pdi) {
@@ -748,18 +745,18 @@
ProfileDeferralMgr.registerDeferral(this.profileActivator);
}
-
/**
- * Frees the resources associated with an ICC_Profile object.
+ * Frees the resources associated with an {@code ICC_Profile} object.
*
- * @deprecated The {@code finalize} method has been deprecated.
- * Subclasses that override {@code finalize} in order to perform cleanup
- * should be modified to use alternative cleanup mechanisms and
- * to remove the overriding {@code finalize} method.
- * When overriding the {@code finalize} method, its implementation must explicitly
- * ensure that {@code super.finalize()} is invoked as described in {@link Object#finalize}.
- * See the specification for {@link Object#finalize()} for further
- * information about migration options.
+ * @deprecated The {@code finalize} method has been deprecated. Subclasses
+ * that override {@code finalize} in order to perform cleanup should
+ * be modified to use alternative cleanup mechanisms and to remove
+ * the overriding {@code finalize} method. When overriding the
+ * {@code finalize} method, its implementation must explicitly
+ * ensure that {@code super.finalize()} is invoked as described in
+ * {@link Object#finalize}. See the specification for {@link
+ * Object#finalize()} for further information about migration
+ * options.
*/
@Deprecated(since="9")
protected void finalize () {
@@ -770,14 +767,14 @@
}
}
-
/**
- * Constructs an ICC_Profile object corresponding to the data in
- * a byte array. Throws an IllegalArgumentException if the data
- * does not correspond to a valid ICC Profile.
- * @param data the specified ICC Profile data
- * @return an {@code ICC_Profile} object corresponding to
- * the data in the specified {@code data} array.
+ * Constructs an {@code ICC_Profile} object corresponding to the data in a
+ * byte array. Throws an {@code IllegalArgumentException} if the data does
+ * not correspond to a valid ICC Profile.
+ *
+ * @param data the specified ICC Profile data
+ * @return an {@code ICC_Profile} object corresponding to the data in the
+ * specified {@code data} array
*/
public static ICC_Profile getInstance(byte[] data) {
ICC_Profile thisProfile;
@@ -821,22 +818,19 @@
return thisProfile;
}
-
-
/**
- * Constructs an ICC_Profile corresponding to one of the specific color
- * spaces defined by the ColorSpace class (for example CS_sRGB).
- * Throws an IllegalArgumentException if cspace is not one of the
- * defined color spaces.
- *
- * @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.
+ * 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
+ * @throws IllegalArgumentException If {@code cspace} is not one of the
+ * predefined color space types
*/
public static ICC_Profile getInstance (int cspace) {
ICC_Profile thisProfile = null;
@@ -931,51 +925,49 @@
return thisProfile;
}
- /* This asserts system privileges, so is used only for the
- * standard profiles.
+ /**
+ * This method asserts system privileges, so is used only for the standard
+ * profiles.
*/
private static ICC_Profile getStandardProfile(final String name) {
-
return AccessController.doPrivileged(
- new PrivilegedAction() {
- 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() {
+ 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.
- *
- * @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.
+ * 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.
+ *
+ * @param fileName the file that contains the data for the profile
+ * @return an {@code ICC_Profile} object corresponding to the data in the
+ * specified file
+ * @throws IOException If the specified file cannot be opened or an I/O
+ * error occurs while reading the file
+ * @throws IllegalArgumentException If the file does not contain valid ICC
+ * Profile data
+ * @throws SecurityException If a security manager is installed and it does
+ * not permit read access to the given file
*/
public static ICC_Profile getInstance(String fileName) throws IOException {
ICC_Profile thisProfile;
@@ -999,21 +991,19 @@
return thisProfile;
}
-
/**
- * Constructs an ICC_Profile corresponding to the data in an InputStream.
- * This method throws an IllegalArgumentException if the stream does not
- * contain valid ICC Profile data. It throws an IOException if an I/O
- * error occurs while reading the stream.
- * @param s The input stream from which to read the profile data.
- *
- * @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.
+ * 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.
+ *
+ * @param s the input stream from which to read the profile data
+ * @return an {@code ICC_Profile} object corresponding to the data in the
+ * specified {@code InputStream}
+ * @throws IOException If an I/O error occurs while reading the stream
+ * @throws IllegalArgumentException If the stream does not contain valid ICC
+ * Profile data
*/
public static ICC_Profile getInstance(InputStream s) throws IOException {
byte[] profileData;
@@ -1070,17 +1060,15 @@
return profileData;
}
-
/**
- * Constructs an ICC_Profile for which the actual loading of the
- * profile data from a file and the initialization of the CMM should
- * be deferred as long as possible.
- * Deferral is only used for standard profiles.
- * If deferring is disabled, then getStandardProfile() ensures
- * that all of the appropriate access privileges are granted
- * when loading this profile.
- * If deferring is enabled, then the deferred activation
- * code will take care of access privileges.
+ * Constructs an {@code ICC_Profile} for which the actual loading of the
+ * profile data from a file and the initialization of the CMM should be
+ * deferred as long as possible. Deferral is only used for standard
+ * profiles. If deferring is disabled, then getStandardProfile() ensures
+ * that all of the appropriate access privileges are granted when loading
+ * this profile. If deferring is enabled, then the deferred activation code
+ * will take care of access privileges.
+ *
* @see #activateDeferredProfile()
*/
static ICC_Profile getDeferredInstance(ProfileDeferralInfo pdi) {
@@ -1131,10 +1119,10 @@
}
}
-
/**
* Returns profile major version.
- * @return The major version of the profile.
+ *
+ * @return the major version of the profile
*/
public int getMajorVersion() {
byte[] theHeader;
@@ -1147,7 +1135,8 @@
/**
* Returns profile minor version.
- * @return The minor version of the profile.
+ *
+ * @return the minor version of the profile
*/
public int getMinorVersion() {
byte[] theHeader;
@@ -1160,7 +1149,8 @@
/**
* Returns the profile class.
- * @return One of the predefined profile class constants.
+ *
+ * @return one of the predefined profile class constants
*/
public int getProfileClass() {
byte[] theHeader;
@@ -1214,16 +1204,16 @@
}
/**
- * Returns the color space type. Returns one of the color space type
- * constants defined by the ColorSpace class. This is the
- * "input" color space of the profile. The type defines the
- * number of components of the color space and the interpretation,
- * e.g. TYPE_RGB identifies a color space with three components - red,
- * green, and blue. It does not define the particular color
- * characteristics of the space, e.g. the chromaticities of the
- * primaries.
- * @return One of the color space type constants defined in the
- * {@code ColorSpace} class.
+ * Returns the color space type. Returns one of the color space type
+ * constants defined by the {@code ColorSpace} class. This is the "input"
+ * color space of the profile. The type defines the number of components of
+ * the color space and the interpretation, e.g. {@code TYPE_RGB} identifies
+ * a color space with three components - red, green, and blue. It does not
+ * define the particular color characteristics of the space, e.g. the
+ * chromaticities of the primaries.
+ *
+ * @return one of the color space type constants defined in the
+ * {@code ColorSpace} class
*/
public int getColorSpaceType() {
if (deferralInfo != null) {
@@ -1247,15 +1237,16 @@
/**
* Returns the color space type of the Profile Connection Space (PCS).
- * Returns one of the color space type constants defined by the
- * ColorSpace class. This is the "output" color space of the
- * profile. For an input, display, or output profile useful
- * for tagging colors or images, this will be either TYPE_XYZ or
- * TYPE_Lab and should be interpreted as the corresponding specific
- * color space defined in the ICC specification. For a device
- * link profile, this could be any of the color space type constants.
- * @return One of the color space type constants defined in the
- * {@code ColorSpace} class.
+ * Returns one of the color space type constants defined by the ColorSpace
+ * class. This is the "output" color space of the profile. For an input,
+ * display, or output profile useful for tagging colors or images, this will
+ * be either {@code TYPE_XYZ} or {@code TYPE_Lab} and should be interpreted
+ * as the corresponding specific color space defined in the ICC
+ * specification. For a device link profile, this could be any of the color
+ * space type constants.
+ *
+ * @return one of the color space type constants defined in the
+ * {@code ColorSpace} class
*/
public int getPCSType() {
if (ProfileDeferralMgr.deferring) {
@@ -1275,14 +1266,12 @@
return thePCS;
}
-
/**
- * Write this ICC_Profile to a file.
+ * Write this {@code ICC_Profile} to a file.
*
- * @param fileName The file to write the profile data to.
- *
- * @exception IOException If the file cannot be opened for writing
- * or an I/O error occurs while writing to the file.
+ * @param fileName the file to write the profile data to
+ * @throws IOException If the file cannot be opened for writing or an I/O
+ * error occurs while writing to the file
*/
public void write(String fileName) throws IOException {
FileOutputStream outputFile;
@@ -1295,14 +1284,11 @@
outputFile.close ();
}
-
/**
- * Write this ICC_Profile to an OutputStream.
- *
- * @param s The stream to write the profile data to.
+ * Write this {@code ICC_Profile} to an {@code OutputStream}.
*
- * @exception IOException If an I/O error occurs while writing to the
- * stream.
+ * @param s the stream to write the profile data to
+ * @throws IOException If an I/O error occurs while writing to the stream
*/
public void write(OutputStream s) throws IOException {
byte[] profileData;
@@ -1312,10 +1298,11 @@
s.write(profileData);
}
-
/**
- * Returns a byte array corresponding to the data of this ICC_Profile.
- * @return A byte array that contains the profile data.
+ * Returns a byte array corresponding to the data of this
+ * {@code ICC_Profile}.
+ *
+ * @return a byte array that contains the profile data
* @see #setData(int, byte[])
*/
public byte[] getData() {
@@ -1339,20 +1326,17 @@
return profileData;
}
-
/**
- * Returns a particular tagged data element from the profile as
- * a byte array. Elements are identified by signatures
- * as defined in the ICC specification. The signature
- * icSigHead can be used to get the header. This method is useful
- * for advanced applets or applications which need to access
- * profile data directly.
- *
- * @param tagSignature The ICC tag signature for the data element you
- * want to get.
+ * 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.
*
- * @return A byte array that contains the tagged data element. Returns
- * {@code null} if the specified tag doesn't exist.
+ * @param tagSignature the ICC tag signature for the data element you want
+ * to get
+ * @return a byte array that contains the tagged data element. Returns
+ * {@code null} if the specified tag doesn't exist.
* @see #setData(int, byte[])
*/
public byte[] getData(int tagSignature) {
@@ -1387,20 +1371,20 @@
}
/**
- * Sets a particular tagged data element in the profile from
- * a byte array. The array should contain data in a format, corresponded
- * to the {@code tagSignature} as defined in the ICC specification, section 10.
+ * Sets a particular tagged data element in the profile from a byte array.
+ * The array should contain data in a format, corresponded to the
+ * {@code tagSignature} as defined in the ICC specification, section 10.
* This method is useful for advanced applets or applications which need to
* access profile data directly.
*
- * @param tagSignature The ICC tag signature for the data element
- * you want to set.
- * @param tagData the data to set for the specified tag signature
- * @throws IllegalArgumentException if {@code tagSignature} is not a signature
- * as defined in the ICC specification.
+ * @param tagSignature the ICC tag signature for the data element you want
+ * to set
+ * @param tagData the data to set for the specified tag signature
+ * @throws IllegalArgumentException if {@code tagSignature} is not a
+ * signature as defined in the ICC specification.
* @throws IllegalArgumentException if a content of the {@code tagData}
- * array can not be interpreted as valid tag data, corresponding
- * to the {@code tagSignature}.
+ * array can not be interpreted as valid tag data, corresponding to
+ * the {@code tagSignature}
* @see #getData
*/
public void setData(int tagSignature, byte[] tagData) {
@@ -1413,9 +1397,8 @@
}
/**
- * Sets the rendering intent of the profile.
- * This is used to select the proper transform from a profile that
- * has multiple transforms.
+ * Sets the rendering intent of the profile. This is used to select the
+ * proper transform from a profile that has multiple transforms.
*/
void setRenderingIntent(int renderingIntent) {
byte[] theHeader = getData(icSigHead);/* getData will activate deferred
@@ -1425,12 +1408,11 @@
setData (icSigHead, theHeader);
}
-
/**
- * Returns the rendering intent of the profile.
- * This is used to select the proper transform from a profile that
- * has multiple transforms. It is typically set in a source profile
- * to select a transform from an output profile.
+ * Returns the rendering intent of the profile. This is used to select the
+ * proper transform from a profile that has multiple transforms. It is
+ * typically set in a source profile to select a transform from an output
+ * profile.
*/
int getRenderingIntent() {
byte[] theHeader = getData(icSigHead);/* getData will activate deferred
@@ -1449,17 +1431,13 @@
return (0xffff & renderingIntent);
}
-
/**
- * Returns the number of color components in the "input" color
- * space of this profile. For example if the color space type
- * of this profile is TYPE_RGB, then this method will return 3.
+ * Returns the number of color components in the "input" color space of this
+ * profile. For example if the color space type of this profile is
+ * {@code TYPE_RGB}, then this method will return 3.
*
- * @return The number of color components in the profile's input
- * color space.
- *
- * @throws ProfileDataException if color space is in the profile
- * is invalid
+ * @return the number of color components in the profile's input color space
+ * @throws ProfileDataException if color space is in the profile is invalid
*/
public int getNumComponents() {
byte[] theHeader;
@@ -1553,20 +1531,18 @@
return theNumComponents;
}
-
/**
- * Returns a float array of length 3 containing the X, Y, and Z
- * components of the mediaWhitePointTag in the ICC profile.
+ * Returns a float array of length 3 containing the X, Y, and Z components
+ * of the mediaWhitePointTag in the ICC profile.
*/
float[] getMediaWhitePoint() {
return getXYZTag(icSigMediaWhitePointTag);
/* get the media white point tag */
}
-
/**
- * Returns a float array of length 3 containing the X, Y, and Z
- * components encoded in an XYZType tag.
+ * Returns a float array of length 3 containing the X, Y, and Z components
+ * encoded in an XYZType tag.
*/
float[] getXYZTag(int theTagSignature) {
byte[] theData;
@@ -1587,17 +1563,16 @@
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 getTRC(). theTagSignature should be one of icSigGrayTRCTag,
+ * icSigRedTRCTag, icSigGreenTRCTag, or 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 +1595,24 @@
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.
+ * 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.
+ *
+ * @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 +1639,9 @@
return theTRC;
}
-
- /* convert an ICC color space signature into a Java color space type */
+ /**
+ * Convert an ICC color space signature into a Java color space type.
+ */
static int iccCStoJCS(int theColorSpaceSig) {
int theColorSpace;
@@ -1775,7 +1749,6 @@
default:
throw new IllegalArgumentException ("Unknown color space");
}
-
return theColorSpace;
}
@@ -1807,17 +1780,16 @@
array[index+1] = (byte) (value);
}
-
- /*
- * fileName may be an absolute or a relative file specification.
- * Relative file names are looked for in several places: first, relative
- * to any directories specified by the java.iccprofile.path property;
- * second, relative to any directories specified by the java.class.path.
- * The built-in profile files are now loaded as resources, since they
- * may not be individual disk files, and so this method will not find
- * these and on a null return, the caller needs to try as resources.
- * Built-in profiles use .pf as the file name extension for profiles,
- * e.g. sRGB.pf.
+ /**
+ * {@code fileName} may be an absolute or a relative file specification.
+ * Relative file names are looked for in several places: first, relative to
+ * any directories specified by the {@code java.iccprofile.path} property;
+ * second, relative to any directories specified by the
+ * {@code java.class.path}. The built-in profile files are now loaded as
+ * resources, since they may not be individual disk files, and so this
+ * method will not find these and on a {@code null} return, the caller needs
+ * to try as resources. Built-in profiles use {@code .pf} as the file name
+ * extension for profiles, e.g. {@code sRGB.pf}.
*/
private static File getProfileFile(String fileName) {
String path, dir, fullPath;
@@ -1862,10 +1834,9 @@
}
/**
- * Returns a stream corresponding to a built-in profile
- * specified by fileName.
- * If there is no built-in profile with such name, then the method
- * returns null.
+ * Returns a stream corresponding to a built-in profile specified by
+ * fileName. If there is no built-in profile with such name, then the method
+ * returns {@code null}.
*/
private static InputStream getStandardProfileInputStream(String fileName) {
return AccessController.doPrivileged(
@@ -1909,68 +1880,58 @@
});
}
-
/*
* Serialization support.
*
- * Directly deserialized profiles are useless since they are not
- * registered with CMM. We don't allow constructor to be called
- * directly and instead have clients to call one of getInstance
- * factory methods that will register the profile with CMM. For
- * deserialization we implement readResolve method that will
- * resolve the bogus deserialized profile object with one obtained
- * with getInstance as well.
- *
- * 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.
+ * 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.
+ *
+ * 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
- * CS_*
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.
- *
- * 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
+ * CS_*
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.
+ *
+ * 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 +1970,30 @@
private transient ICC_Profile resolvedDeserializedProfile;
/**
- * Reads default serializable fields from the stream. Reads from
- * the stream a string and an array of bytes as additional data.
+ * Reads default serializable fields from the stream. Reads from the stream
+ * a string and an array of bytes as additional data.
*
- * @param s stream used for deserialization.
- * @throws IOException
- * thrown by {@code ObjectInputStream}.
- * @throws ClassNotFoundException
- * thrown by {@code ObjectInputStream}.
- * @serialData
- * The {@code String} is the name of one of
- * CS_*
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.
- *
- * The {@code byte[]} array is the profile data for the
- * profile. It will usually be {@code null} for the
- * predefined profiles.
- *
- * If the string is recognized as a constant name for
- * predefined color space the object will be resolved into
- * profile obtained with
- * getInstance(int cspace)
and the profile
- * data are ignored. Otherwise the object will be resolved
- * into profile obtained with
- * getInstance(byte[] 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
+ * CS_*
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.
+ *
+ * The {@code byte[]} array is the profile data for the profile. It
+ * will usually be {@code null} for the predefined profiles.
+ *
+ * If the string is recognized as a constant name for predefined
+ * color space the object will be resolved into profile obtained
+ * with
+ * getInstance(int cspace)
and the profile data
+ * are
+ * ignored. Otherwise the object will be resolved into profile
+ * obtained with
+ * getInstance(byte[] data)
.
* @see #readResolve()
* @see #getInstance(int)
* @see #getInstance(byte[])
@@ -2075,11 +2033,11 @@
}
/**
- * Resolves instances being deserialized into instances registered
- * with CMM.
- * @return ICC_Profile object for profile registered with CMM.
- * @throws ObjectStreamException
- * never thrown, but mandated by the serialization spec.
+ * Resolves instances being deserialized into instances registered with CMM.
+ *
+ * @return ICC_Profile object for profile registered with CMM
+ * @throws ObjectStreamException never thrown, but mandated by the
+ * serialization spec
* @since 1.3
*/
protected Object readResolve() throws ObjectStreamException {