< prev index next >

src/java.desktop/share/classes/java/awt/color/ICC_Profile.java

Print this page

        

@@ -21,12 +21,11 @@
  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  * or visit www.oracle.com if you need additional information or have any
  * questions.
  */
 
-/*
- **********************************************************************
+/* ********************************************************************
  **********************************************************************
  **********************************************************************
  *** COPYRIGHT (c) Eastman Kodak Company, 1997                      ***
  *** As  an unpublished  work pursuant to Title 17 of the United    ***
  *** States Code.  All rights reserved.                             ***

@@ -34,66 +33,58 @@
  **********************************************************************
  **********************************************************************/
 
 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;
 import java.io.InputStream;
 import java.io.ObjectInputStream;
 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;
 
     private transient Profile cmmProfile;

@@ -108,11 +99,10 @@
     private static ICC_Profile XYZprofile;
     private static ICC_Profile PYCCprofile;
     private static ICC_Profile GRAYprofile;
     private static ICC_Profile LINEAR_RGBprofile;
 
-
     /**
      * Profile class is input.
      */
     public static final int CLASS_INPUT = 0;
 

@@ -144,11 +134,10 @@
     /**
      * Profile class is named color.
      */
     public static final int CLASS_NAMEDCOLOR = 6;
 
-
     /**
      * ICC Profile Color Space Type Signature: 'XYZ '.
      */
     public static final int icSigXYZData        = 0x58595A20;    /* 'XYZ ' */
 

@@ -319,10 +308,11 @@
      */
     public static final int icRelativeColorimetric    = 1;
 
     /**
      * ICC Profile Rendering Intent: Media-RelativeColorimetric.
+     *
      * @since 1.5
      */
     public static final int icMediaRelativeColorimetric = 1;
 
     /**

@@ -335,10 +325,11 @@
      */
     public static final int icAbsoluteColorimetric    = 3;
 
     /**
      * ICC Profile Rendering Intent: ICC-AbsoluteColorimetric.
+     *
      * @since 1.5
      */
     public static final int icICCAbsoluteColorimetric = 3;
 
 

@@ -367,10 +358,11 @@
      */
     public static final int icSigBlueColorantTag  = 0x6258595A;    /* 'bXYZ' */
 
     /**
      * ICC Profile Tag Signature: 'bXYZ'.
+     *
      * @since 1.5
      */
     public static final int icSigBlueMatrixColumnTag = 0x6258595A; /* 'bXYZ' */
 
     /**

@@ -444,10 +436,11 @@
      */
     public static final int icSigGreenColorantTag = 0x6758595A;    /* 'gXYZ' */
 
     /**
      * ICC Profile Tag Signature: 'gXYZ'.
+     *
      * @since 1.5
      */
     public static final int icSigGreenMatrixColumnTag = 0x6758595A;/* 'gXYZ' */
 
     /**

@@ -548,10 +541,11 @@
      */
     public static final int icSigRedColorantTag   = 0x7258595A;    /* 'rXYZ' */
 
     /**
      * ICC Profile Tag Signature: 'rXYZ'.
+     *
      * @since 1.5
      */
     public static final int icSigRedMatrixColumnTag = 0x7258595A;  /* 'rXYZ' */
 
     /**

@@ -594,22 +588,25 @@
      */
     public static final int icSigChromaticityTag  = 0x6368726d;    /* 'chrm' */
 
     /**
      * 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' */
 
 

@@ -693,10 +690,11 @@
      */
     public static final int icHdrCreator      = 80; /* Profile creator */
 
     /**
      * ICC Profile Header Location: profile's ID.
+     *
      * @since 1.5
      */
     public static final int icHdrProfileID = 84; /* Profile's ID */
 
 

@@ -725,19 +723,18 @@
      */
     public static final int icXYZNumberX       = 8;    /* XYZNumber X */
 
 
     /**
-     * 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) {
         this.deferralInfo = pdi;
         this.profileActivator = new ProfileActivator() {

@@ -746,40 +743,40 @@
             }
         };
         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 () {
         if (cmmProfile != null) {
             CMSManager.getModule().freeProfile(cmmProfile);
         } else if (profileActivator != null) {
             ProfileDeferralMgr.unregisterDeferral(profileActivator);
         }
     }
 
-
     /**
-     * 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.
+     * 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.
+     * @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;
 
         Profile p = null;

@@ -819,26 +816,23 @@
             thisProfile = new ICC_Profile (p);
         }
         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;
         String fileName;
 

@@ -929,55 +923,53 @@
         }
 
         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);
+                            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;
         InputStream is = null;
 

@@ -997,25 +989,23 @@
         is.close();    /* close the file */
 
         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;
 
         if (s instanceof ProfileDeferralInfo) {

@@ -1068,21 +1058,19 @@
         }
 
         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) {
         if (!ProfileDeferralMgr.deferring) {
             return getStandardProfile(pdi.filename);

@@ -1129,14 +1117,14 @@
             pde.initCause(c);
             throw pde;
         }
     }
 
-
     /**
      * Returns profile major version.
-     * @return  The major version of the profile.
+     *
+     * @return the major version of the profile
      */
     public int getMajorVersion() {
     byte[] theHeader;
 
         theHeader = getData(icSigHead); /* getData will activate deferred

@@ -1145,11 +1133,12 @@
         return (int) theHeader[8];
     }
 
     /**
      * Returns profile minor version.
-     * @return The minor version of the profile.
+     *
+     * @return the minor version of the profile
      */
     public int getMinorVersion() {
     byte[] theHeader;
 
         theHeader = getData(icSigHead); /* getData will activate deferred

@@ -1158,11 +1147,12 @@
         return (int) theHeader[9];
     }
 
     /**
      * 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;
     int theClassSig, theClass;
 

@@ -1213,19 +1203,19 @@
         return theClass;
     }
 
     /**
      * 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.
+     * 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) {
             return deferralInfo.colorSpaceType; /* Need to have this info for
                                                    ICC_ColorSpace without

@@ -1245,19 +1235,20 @@
         return theColorSpace;
     }
 
     /**
      * 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) {
             ProfileDeferralMgr.activateProfiles();
         }

@@ -1273,18 +1264,16 @@
         thePCSSig = intFromBigEndian(theHeader, icHdrPcs);
         thePCS = iccCStoJCS(thePCSSig);
         return thePCS;
     }
 
-
     /**
-     * Write this ICC_Profile to a file.
-     *
-     * @param fileName The file to write the profile data to.
+     * Write this {@code ICC_Profile} to a file.
      *
-     * @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;
     byte[] profileData;
 

@@ -1293,31 +1282,29 @@
         outputFile = new FileOutputStream(fileName);
         outputFile.write(profileData);
         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;
 
         profileData = getData(); /* this will activate deferred
                                     profiles if necessary */
         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() {
     int profileSize;
     byte[] profileData;

@@ -1337,23 +1324,20 @@
         mdl.getProfileData(cmmProfile, profileData);
 
         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
+     * @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) {
 

@@ -1385,24 +1369,24 @@
 
         return tagData;
     }
 
     /**
-     * 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  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 {@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) {
 
         if (ProfileDeferralMgr.deferring) {

@@ -1411,28 +1395,26 @@
 
         CMSManager.getModule().setTagData(cmmProfile, tagSignature, tagData);
     }
 
     /**
-     * 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
                                                  profiles if necessary */
         intToBigEndian (renderingIntent, theHeader, icHdrRenderingIntent);
                                                  /* set the rendering intent */
         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
                                                  profiles if necessary */
 

@@ -1447,21 +1429,17 @@
          *  See http://www.color.org/ICC1v42_2006-05.pdf, section 7.2.15.
          */
         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.
-     *
-     * @return The number of color components in the profile's input
-     * color space.
+     * 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.
      *
-     * @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;
     int    theColorSpaceSig, theNumComponents;
 

@@ -1551,24 +1529,22 @@
         }
 
         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;
     float[] theXYZNumber;
     int i1, i2, theS15Fixed16;

@@ -1585,21 +1561,20 @@
             theXYZNumber [i1] = ((float) theS15Fixed16) / 65536.0f;
         }
         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;
     float theGamma;
     int theU8Fixed8;

@@ -1618,30 +1593,28 @@
         theGamma = ((float) theU8Fixed8) / 256.0f;
 
         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;
     short[] theTRC;
     int i1, i2, nElements, theU8Fixed8;

@@ -1664,12 +1637,13 @@
         }
 
         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;
 
         switch (theColorSpaceSig) {
         case icSigXYZData:

@@ -1773,11 +1747,10 @@
             break;
 
         default:
             throw new IllegalArgumentException ("Unknown color space");
         }
-
         return theColorSpace;
     }
 
 
     static int intFromBigEndian(byte[] array, int index) {

@@ -1805,21 +1778,20 @@
     static void shortToBigEndian(short value, byte[] array, int index) {
             array[index]   = (byte) (value >> 8);
             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;
 
         File f = new File(fileName); /* try absolute file name */

@@ -1860,14 +1832,13 @@
         }
         return f;
     }
 
     /**
-     * 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(
             new PrivilegedAction<InputStream>() {
                 public InputStream run () {

@@ -1907,72 +1878,62 @@
                     return PCMM.class.getResource("profiles/"+fileName) != null;
                 }
             });
     }
 
-
     /*
      * 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&nbsp;{@code 1} corresponds to Java&nbsp;2
-     * Platform,&nbsp;v1.3.
-     * @since 1.3
+     * Version of the format of additional serialized data in the stream.
+     * Version&nbsp;{@code 1} corresponds to Java&nbsp;2 Platform,&nbsp;v1.3.
+     *
      * @serial
+     * @since 1.3
      */
     private int iccProfileSerializedDataVersion = 1;
 
-
     /**
-     * Writes default serializable fields to the stream.  Writes a
-     * string and an array of bytes to the stream as additional data.
+     * Writes default serializable fields to the stream. Writes a string and an
+     * array of bytes to the stream as additional data.
      *
-     * @param s stream used for serialization.
-     * @throws IOException
-     *     thrown by {@code ObjectInputStream}.
-     * @serialData
-     *     The {@code String} is the name of one of
+     * @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.
+     *         {@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.
+     *         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
     {
         s.defaultWriteObject();

@@ -2007,36 +1968,33 @@
     // Temporary storage used by readObject to store resolved profile
     // (obtained with getInstance) for readResolve to return.
     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
+     * @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.
+     *         {@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.
+     *         The {@code byte[]} array is the profile data for the profile. It
+     *         will usually be {@code null} for the predefined profiles.
      *     <p>
-     *     If the string is recognized as a constant name for
-     *     predefined color space the object will be resolved into
-     *     profile obtained with
-     *     <code>getInstance(int&nbsp;cspace)</code> and the profile
-     *     data are ignored.  Otherwise the object will be resolved
-     *     into profile obtained with
+     *         If the string is recognized as a constant name for predefined
+     *         color space the object will be resolved into profile obtained
+     *         with
+     *         <code>getInstance(int&nbsp;cspace)</code> and the profile data
+     *         are
+     *         ignored. Otherwise the object will be resolved into profile
+     *         obtained with
      *     <code>getInstance(byte[]&nbsp;data)</code>.
      * @see #readResolve()
      * @see #getInstance(int)
      * @see #getInstance(byte[])
      */

@@ -2073,15 +2031,15 @@
             resolvedDeserializedProfile = getInstance(data);
         }
     }
 
     /**
-     * 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 {
         return resolvedDeserializedProfile;
     }
< prev index next >