Dear Interest Group Members,

We are pleased to announce that JAI 1.1.2-beta is now available for download
via the JAI home page at

        http://java.sun.com/products/java-media/jai/

or directly via the download page at

        http://java.sun.com/products/java-media/jai/downloads/download.html

As this is a beta release, you must be registered with the Java Developer
Connection (JDC) to download the bundles.

Please take the time to read the README, INSTALLATION, BUGS, and FAQ pages
which are linked to the download page. A text version of the README is also
included below for your convenience.

As indicated on the README page, many of the features in this release are in
response to messages posted to the jai-interest mailing list.

We encourage you to download and try out JAI 1.1.2-beta at your earliest
possible convenience and to apprise us of any problems encountered. The sooner
we know about them, the more likely it is that they will be fixed before the
final version is released.

Thank you for your continued interest in Sun Microsystems and its products
including Java Advanced Imaging in particular.

On behalf of the JAI team,

Brian
JAI lead architect

~~~~~~~~~~~~~~~~~~

                            JavaTM Advanced Imaging API
                                            v1.1.2-beta
                                                 Readme

  Contents

     * Introduction
          o Installation and System Requirements
          o Documentation
          o Bugs
     * Overview of JAI Functionality
          o Core Functionality
          o Operators
               + Native Acceleration
          o How to Run the JAI 1.1 version of Remote Imaging
          o How to Run the JAI 1.0.2 version of Remote Imaging
     * What's New
          o Core Classes
          o Operations
          o Network Imaging
          o Widget Package
          o Fixed Bugs

     * Feedback

  Introduction

  The Maintenance Review Draft of the 1.1 version of the Java TM Advanced Imaging
  (JAI) specification contains some changes since the JAI 1.1 specification Final
  Release. The present reference implementation, called Java Advanced Imaging
  1.1.2-beta, implements the Maintenance Review Draft of the JAI 1.1
  specification and also contains bug fixes and performance enhancements with
  respect to the most recent implementation of the JAI 1.1 specification Final
  Release which was called JAI 1.1.1_01. It represents development pursuant to
  maintenance of the Java Advanced Imaging 1.1 JSR.

  The changes since JAI 1.1.1_01 are described in the "What's New" section of
  this document.

  The Java Advanced Imaging API home page is located at
  http://java.sun.com/products/java-media/jai/. There you will find binaries,
  documentation, answers to frequently asked questions, and other information.

  Installation and System Requirements

  For general installation instructions please refer to the INSTALL page. For
  system requirements please refer to the system requirements section of the
  INSTALL page.

  Documentation

  Links to Java Advanced Imaging documentation are available at
  http://java.sun.com/products/java-media/jai/docs/

  Bugs

  Some bugs are known to exist - see the BUGS page for details.

  Overview of JAI Functionality

  Core Functionality

  All areas of the JAI specification have been implemented for this release. The
  com.sun.media.jai.codec package continues to be an uncommitted part of JAI. For
  mode information on image reading and writing images on the Java 2 platform and
  in JAI please refer to the page Image I/O in Java Advanced Imaging.

  All operators outlined in the Java Advanced Imaging API specification are
  implemented.

  The major areas of JAI functionality are described below:

    1. Tiling

       Images are made up of tiles. Different images may have different tile
       sizes. Each tile can be processed and stored in memory separately. Tiles
       may be stored in a centrally-maintained cache for performance. The use of
       tiling also facilitates the use of multiple threads for computation.
       Previously allocated tiles may also be re-used to save memory.

    2. Deferred execution

       Image operations performed on an image do not take place immediately when
       they are defined. Calculation of pixels happens only when a portion of the
       resultant image is requested, and only tiles that are needed are
       processed. However, operations always appear semantically to be completed
       immediately.

    3. Threaded Computation

       Requests for tiles are given to several running threads, allowing
       potential speedups on multi-processor systems or when requesting data over
       the network.

    4. Object-Oriented Extensibility

       Users can add their own image operators or override existing operators by
       registering the new operators with the operation registry. Please see the
       "The Java Advanced Imaging API White Paper," the API documentation, the
       JAI tutorial, the sample code, and the jai-interest archives for more
       information (in the archives search for subjects beginning with "sample
       code").

       Additionally, users may extend a number of non-image classes in order to
       add functionality to JAI:

          o Border Extension

            Operators may obtain an extended view of their sources using an
            extensible mechanism for generating pixel values outside of the
            source image bounds. New subclasses of BorderExtender may be used to
            obtain customized functionality.

          o Image Warping

            Subclasses of Warp may be written to perform customized image
            warping.

          o Pixel Interpolation

            Subclasses of Interpolation may be written to perform customized
            pixel interpolation.

          o Color Spaces

            Subclasses of ColorSpaceJAI may be written to implement
            mathematically defined color space transformations without the need
            for ICC profiles.

    5. Graphics2D-Style Drawing

       Graphics2D-style drawing may be performed on a TiledImage in a manner
       analogous to that available for java.awt.image.BufferedImage.

       The RenderableGraphics class provides a way to store a sequence of drawing
       commands and to "replay" them at an arbitrary output resolution.

    6. Regions of interest (ROIs)

       Non-rectangular portions of an image may be specified using a ROI or
       ROIShape object. These ROIs may be used as parameters to the Extrema,
       Mean, Histogram or Mosaic operations and the TiledImage.set() and
       TiledImage.setData() methods. Operations produce an appropriate ROI
       property on their output when one exists on their input.

    7. Image file handling

       This release of Java Advanced Imaging supports BMP, FlashPIX, GIF, JPEG,
       PNG, PNM, and TIFF images as defined in the TIFF 6.0 specification, and
       WBMP type 0 B/W uncompressed bitmaps. TIFF G3 (1D and 2D), G4, PackBits,
       LZW, JPEG, and DEFLATE (Zip) compression types are understood.

       The classes dealing with image file handling (the com.sun.media.jai.codec
       package and private implementation packages that provide support for it)
       are provided in a separate jai file, jai_codec.jar. This jar file may be
       used separately from the jai_core.jar file containing the various
       javax.media.jai packages and their supporting classes.

       As described in the Core Functionality section of this document, the image
       codec classes should be considered as temporary helper functions. They
       will be replaced by a new API for image I/O that has been defined under
       the Java Community Process.

          o BMP File Handling:

                 The BMP reader can read Version 2.x, 3.x and some 4.x BMP
                 images. BMP images with 1, 4, 8, 24 bits can be read with this
                 reader. Support for 16 and 32 bit images has also been
                 implemented, although such images are not very common.

                 Reading of compressed BMPs is supported. BI_RGB, BI_RLE8,
                 BI_RLE4 and BI_BITFIELDS compressions are handled.

                 The BMP reader emits properties such as type of compression,
                 bits per pixel etc. Use the getPropertyNames() method to get the
                 names of all the properties emitted.

                 BMP Limitations:

                    + Only the default RGB color space is supported.
                    + Alpha channels are not supported.

                 BMP Writer:
                    + The BMP writer is capable of writing images in the Version
                      3 format. Images which make use of a IndexColorModel with
                      2, 16, or 256 palette entries will be written in palette
                      form.
                    + RLE4 and RLE8 compression is supported when compatible with
                      the image data.

          o FlashPIX file handling:

                 A limited FlashPIX reader is provided that is capable of
                 extracting a single resolution from a FlashPIX image file. Only
                 simple FlashPix files are decoded properly.

                 The image view object is ignored, and image property information
                 is not exported.

                 There is no FlashPIX writer.

          o GIF file handling:

                 There is no GIF writer due to the patent on the LZW compression
                 algorithm.

          o JPEG file handling:

               + JPEG files are read and written using the classes found in the
                 com.sun.image.codec.jpeg package of the JDK. A set of simple JAI
                 wrapper classes around these classes is provided.
               + The JPEG decoder cannot read abbreviated streams, either
                 tables-only or image-only.

          o PNG file handling:

                 All files in the PNGSuite test suite have been read and written
                 successfully. See the documentation in
                 com.sun.media.jai.codec.PNGDecodeParam and PNGEncodeParam for
                 more information.

          o PNM file handling:

                 PNM files may be read and written in both ASCII and raw formats.
                 The encoder automatically selects between PBM (bitmap), PGM
                 (grayscale) and PPM (RGB) files according to the number of bands
                 and bit depth of the source image.

                 Due to the limitations of the format, only images with 1 or 3
                 bands may be written.

          o TIFF file handling:

            TIFF support has the following limitations:

               + The TIFF encoder does not support LZW compression due to the
                 patent on the algorithm.
               + Planar format (PlanarConfiguration field has value 2) is not
                 supported for decoding or encoding.

          o WBMP file handling:

                 The WBMP codec reads and writes images in the Wireless Bitmap
                 format described in chapter 6 and Appendix A of the Wireless
                 Application Protocol (WAP) Wireless Application Environment
                 Specification, Version 1.3, 29 March 2000. The WBMP type
                 supported is WBMP Type 0: B/W, Uncompressed Bitmap. There are no
                 limitations on the image dimensions.

    8. Image Layouts

       Images with arbitrary pixel layouts may be processed in a uniform manner
       using the PixelAccessor and RasterAccessor classes.

       Source images with ComponentColorModels and IndexColorModels are
       supported. DirectColorModel images are not supported.

       PixelAccessor and RasterAccessor provide the most efficient support for
       the ComponentSampleModel/ComponentColorModel combination.

    9. Image Collections

       The output of a standard image operator on an instance of
       java.util.Collection is a collection of the same type. Nested collections
       are supported. Operators may also emit collections of their choice, or
       take collections as sources and emit a single image.

   10. Remote Imaging

       JAI allows operations to be performed remotely to be created in a manner
       similar to local operations. RemoteJAI.create() and
       RemoteJAI.createRenderable() can be used to create operations that are
       performed on remote hosts. Operation chains are created on the client and
       can contain a mix of local and remote operations by using JAI.create() and
       RemoteJAI.create(), respectively to create the operations.

       The "fileload" and "filestore" operations can allow files that reside only
       on remote filesystems to be loaded and stored remotely. This can be
       accomplished by setting the checkFileLocally argument to the operation to
       be false, in which case the presence of the file to be loaded or stored is
       not checked on the local file system when the operation is first created.

       See sections below for instructions on how to use the JAI 1.0.2 and 1.1 or
       later versions of remote imaging.

   11. Iterators

       Optimized Rect and Random iterators exist as well as a non-optimized
       version of the Rook iterator.

   12. Snapshotting of External Sources

       SnapshotImage provides an arbitrary number of synchronous views of a
       possibly changing WritableRenderedImage.

   13. Meta-data Handling

       Meta-data handling is provided via a name-value database of properties
       associated with each JAI image. Mechanisms are provided by which such
       properties may be generated and processed in the course of image
       manipulation. The ability to defer computation of such data is also
       provided in a manner conceptually equivalent to that available for image
       data. Please refer to the DeferredData and DeferredProperty classes for
       more information.

   14. Serialization Support

       SerializerFactory provides a framework is provided to assist in
       serializing instances of classes which do not implement
       java.io.Serializable. Such objects must be serialized by extracting a
       serializable version of their state from which the original object may be
       extracted after deserialization.

  Operators

  Java Advanced Imaging extends the imaging functionality provided in the Java 2D
  API by providing a more flexible and scalable architecture targeted for
  complex, high performance imaging requirements. In this context a large number
  of imaging operators are provided.

     * Native Acceleration

       Pure Java implementations are provided for all image operators and imaging
       performance is addressed for some of these by providing C-based native
       code. Native C-code based acceleration for a certain subset of operators
       under specific conditions (listed in the table below) is available for the
       Sun/Solaris, Win32 and Linux (x86 only) platforms. On Sun UltraSPARC-based
       platforms, additional performance is gained with hardware acceleration via
       the VIS instructions for most natively supported operators. On Win32
       platforms which support MMX instructions, hardware acceleration is gained
       for a subset of the natively supported operators.

       If a native implementation is present it is, by default, the preferred
       implementation. But if the nature of the sources and parameters of the
       operation are incompatible with the native operation then processing will
       revert to Java code. In general the following minimum requirements must be
       adhered to for the mediaLib native implementation of an operation to be
       executed:

          o All sources must be RenderedImages.
          o All sources and destination must have
               + a SampleModel which is a ComponentSampleModel and
               + a ColorModel which is a ComponentColorModel or no ColorModel
                 (i.e., it is null).
          o All sources and the destination must have at most 4 bands of pixel
            data.
          o If Interpolation type is one of the arguments to the operator, then
            native acceleration is available only for Nearest, Bilinear, Bicubic
            and Bicubic2 cases. Additionally for byte images InterpolationTable
            is also supported for native acceleration.

       Further restrictions may be imposed by individual operations but the above
       are the most common requirements.

     * Imaging Operators

       The following image operators are implemented in this release. Only a
       brief description of each operator is provided here. For detailed
       information on these operators, refer to the package
       javax.media.jai.operator in the full documentation available at
       http://java.sun.com/products/java-media/jai/docs/index.html.

       All operations are performed on a per-band basis, unless specified
       otherwise. C acceleration applies to all platforms whereas VIS is specific
       to Sun UltraSPARC and MMX to Windows.

         1. Point and Arithmetic Operators

                                                         Native Acceleration
                Operator Name        Description
                                                    C VIS MMX        Notes
                                 Computes the
            absolute             absolute value of  X  X   X
                                 the pixels of an
                                 image.
                                 Adds the pixel
            add                  values of two      X  X   X
                                 source images.
                                 Adds a collection
            addcollection        of images to one
                                 another.
                                 Adds a set of
            addconst             constant values to X  X   X
                                 the pixel values
                                 of a source image.
                                 Adds a set of
                                 constant values to
            addconsttocollection the pixel values   X  X   X
                                 of a Collection of
                                 source images.
                                 And's the pixel
            and                  values of two      X  X   X
                                 source images.
                                 And's the pixel
            andconst             values of a source X  X   X
                                 image with a set
                                 of constants.
                                 Computes a linear
            bandcombine          combination of the X  X   X  3x4 matrix only.
                                 bands of an image.
                                 Creates an image
                                 consisting of all
                                 bands of all
            bandmerge            sources
                                 concatenated in
                                 the order
                                 encountered.
                                 Selects a subset             Only if the band
            bandselect           of the bands of an X  X   X  selection is
                                 image, possibly              monotonically
                                 reordering them.             increasing.
                                 Thresholds a
                                 single-band image
            binarize             to two levels to   X  X
                                 generate a bilevel
                                 output.
                                 Set all pixel
                                 values below the
                                 low value to that
            clamp                low value, set all X  X   X
                                 the pixel values
                                 above the high
                                 value to that high
                                 value.
                                 Converts an image
            colorconvert         to a given
                                 ColorSpace.
                                 Generates an
                                 optimal LUT by
            colorquantizer       executing a color
                                 quantization
                                 algorithm
                                 Combines two
            composite            images based on    X  X   X
                                 their alpha values
                                 at each pixel.
                                 Creates an image
            constant             with constant
                                 pixel values.
                                 Divides the pixel
                                 values of the
                                 first source image
            divide               by the pixel       X
                                 values of the
                                 second source
                                 image.
                                 Divides the pixel
            dividebyconst        values of a source X
                                 image by a set of
                                 constants.
                                 Divides a set of
            divideintoconst      constants by the   X
                                 pixel values of a
                                 source image.
                                 Computes the
            exp                  exponential of the X
                                 pixel values of an
                                 image.
                                 Performs
                                 reformatting on an
                                 image, including
                                 data type casting,
            format               replacing the
                                 SampleModel and
                                 ColorModel, and
                                 restructuring the
                                 tile grid.
                                 Inverts the pixel
            invert               values of an       X  X   X
                                 image.
                                 Computes the
                                 natural logarithm
            log                  of the pixel       X
                                 values of an
                                 image.
                                 Performs general             Only if table has
            lookup               table lookup on an X  X   X  less than or
                                 image.                       equal to 4 bands.
                                 Performs a
                                 piecewise linear
                                 remapping of pixel
            matchcdf             values to match a
                                 given cumulative
                                 distribution
                                 function.
                                 Chooses the
            max                  maximum pixel      X  X   X
                                 values between two
                                 images.
                                 Chooses the
            min                  minimum pixel      X  X   X
                                 values between two
                                 images.
                                 Multiplies the
            multiply             pixel values of    X  X
                                 two source images.
                                 Multiplies the
            multiplyconst        pixel values of a  X  X
                                 source image by a
                                 set of constants.
                                 Inverts the pixel
            not                  values of a source X  X   X
                                 image.
                                 Or's the pixel
            or                   values of two      X  X   X
                                 source images.
                                 Or's the pixel
            orconst              values of a source X  X   X
                                 image with a set
                                 of constants.
                                 Overlays one image
            overlay              on top of another
                                 image.
                                 Performs piecewise
                                 linear remapping
            piecewise            of the pixel
                                 values of an
                                 image.
                                 Performs a linear
            rescale              remapping of the   X  X
                                 pixel values of an
                                 image.
                                 Subtracts the
            subtract             pixel values of    X  X   X
                                 one image from
                                 those of another.
                                 Subtracts a set of
                                 constant values
            subtractconst        from the pixel     X  X   X
                                 values of an
                                 image.
                                 Subtracts a set of
                                 constant values
            subtractfromconst    from the pixel     X  X   X
                                 values of an
                                 image.
                                 Maps the pixel
                                 values that fall
            threshold            between a low and  X  X   X
                                 high value to a
                                 set of constants.
                                 Xor's the pixel
            xor                  values of two      X  X   X
                                 source images.
                                 Xor's a source
            xorconst             image with a set   X  X   X
                                 of constants.

         2. Area and Geometric Operators

                                                         Native Acceleration
                Operator Name        Description
                                                    C VIS MMX       Notes

                                  Performs first              InterpolationTable
            affine                order geometric   X  X   X  is not MMX
                                  image warping.              accelerated for
                                                              even byte images.

            border                Adds a border
                                  around an image.
                                  Convolves an
            boxfilter             image using a
                                  two-dimensional
                                  box filter.
                                  Performs an MxN
            convolve              image             X  X   X  General and
                                  convolution.                separable cases.
                                  Extracts a
            crop                  subarea of an
                                  image.
                                  Performs
                                                              Only single band,
            dilate                morphological     X  X   X  3x3 kernels
                                  dilation on an
                                  image.                      centered at 1,1
                                  Performs
                                                              Only single band,
            erode                 morphological     X  X   X  3x3 kernels
                                  erosion on an
                                  image.                      centered at 1,1
                                  Performs a
                                  combined integral
            filteredsubsample     subsample and     X  X   X
                                  symmetric
                                  product-separable
                                  filter.
                                  Performs edge
            gradientmagnitude     detection using   X  X   X
                                  orthogonal
                                  gradient masks.
                                  Computes the                Only single band;
            maxfilter             maximum value of  X  X   X  only for a SQUARE
                                  a pixel                     mask of size 3, 5,
                                  neighborhood.               or 7
                                  Computes the
            medianfilter          median value of a X  X   X
                                  pixel
                                  neighborhood.
                                  Computes the                Only single band;
            minfilter             minimum value of  X  X   X  only for a SQUARE
                                  a pixel                     mask of size 3, 5,
                                  neighborhood.               or 7
                                  Creates a mosaic
            mosaic                of two or more    X  X   X
                                  rendered images.

                                  Rotates an image            InterpolationTable
            rotate                about an          X  X   X  is not MMX
                                  arbitrary point.            accelerated for
                                                              even byte images.

                                  Scales and                  InterpolationTable
            scale                 translates an     X  X   X  is not MMX
                                  image.                      accelerated for
                                                              even byte images.
                                                              InterpolationTable
            shear                 Shears an image.  X  X   X  is not MMX
                                                              accelerated for
                                                              even byte images.
                                  Subsamples an
            subsampleaverage      image by          X  X
                                  averaging over a
                                  moving window.
                                  Subsamples a
            subsamplebinarytogray bilevel image to  X  X
                                  a grayscale
                                  image.
                                  Translates an
                                  image by an                 InterpolationTable
            translate             integral or       X  X   X  is not MMX
                                  fractional                  accelerated for
                                  amount.                     even byte images.
                                  Reflects an image
                                  in a specified
            transpose             direction or      X  X   X
                                  rotates an image
                                  in multiples of
                                  90 degrees.
                                  Sharpens an image
            unsharpmask           by suppressing    X  X   X  General and
                                  the low                     separable kernels.
                                  frequencies.
                                  Performs
            warp                  geometric warping X  X   X  polynomial and
                                  on an image.                grid only.

         3. Frequency-domain, Transform, and Complex Operators

                                                             Native Acceleration
              Operator Name            Description
                                                              C  VIS   MMX Notes

            conjugate        Computes the complex conjugate
                             of an image.

            dct              Computes the Discrete Cosine     X
                             Transform of an image.
                             Computes the Discrete Fourier
            dft              Transform of an image, possibly  X
                             resulting in a complex image.

            dividecomplex    Computes the quotient of two
                             complex images.

            idct             Computes the inverse Discrete    X
                             Cosine Transform of an image.

            idft             Computes the inverse Discrete    X
                             Fourier Transform of an image.

            magnitude        Computes the magnitude of a
                             complex image.

            magnitudesquared Computes the squared magnitude
                             of a complex image.

            multiplycomplex  Computes the product of two
                             complex images.
            periodicshift    Shifts an image periodically.

            phase            Computes the phase angle of a
                             complex image.
                             Creates a complex image from
            polartocomplex   two images representing
                             magnitude and phase.

         4. Statistical Operators

                                                  Native
              Operator                         Acceleration
                Name        Description
                                             C VIS  MMX Notes
                        Computes the
                                                              Only if the ROI is
            extrema     maximum and minimum  X  X    X        null or encloses
                        pixel values of an
                        image.                                the entire image.
                        Computes the
            histogram   histogram of an      X  X    X
                        image.
                                                              Only if the ROI is
                        Computes the mean                     null or encloses
            mean        pixel value of a     X  X    X        the entire image
                        region of an image.                   and the sampling
                                                              period is 1.

         5. Sourceless Operators

            Operator Name                     Description
            imagefunction Creates an image by evaluating a function.
            pattern       Creates an image consisting of a repeated pattern.

         6. File and Stream Operators

            Operator Name                       Description
            awtimage      Converts a java.awt.Image into a PlanarImage.
            bmp           Loads an image in BMP format.
            encode        Writes an image to an OutputStream.
            fileload      Loads an image from a file.
            filestore     Writes an image to a file in a given format.
            fpx           Loads an image in FlashPIX format.
            gif           Loads an image in GIF format.
                          Reads an image from a remote IIP server, performing
            iip           IIP view transforms (affine, colortwist, filter,
                          crop).

            iipresolution Reads a single resolution of an image from a remote
                          IIP server.
            jpeg          Loads an image in JPEG format.
            png           Loads an image in PNG 1.0 or 1.1 format.
            pnm           Loads an image in PBM, PGM, or PPM format.
            stream        Loads an image from a stream.
            tiff          Loads an image in TIFF 6.0 format.
            url           Loads an image from a URL.

         7. Other Operators

             Operator Name                      Description

            errordiffusion Performs error diffusion color quantization using a
                           specified color map and error filter.

            null           Performs no processing. Useful as a placeholder in an
                           operation chain or as a node which emits meta-data.

            ordereddither  Performs color quantization using a specified color
                           map and a fixed dither mask.

            renderable     Constructs a RenderableImage from a RenderedImage
                           source.

  How to Run the JAI 1.1 version of Remote Imaging

  1. Create a Security Policy File

  If $JAI is the base directory where Java Advanced Imaging is installed, create
  a text file named $JAI/policy containing the following:

    grant {
      // Allow everything for now
      permission java.security.AllPermission;
    };

  Note that this policy file is for testing purposes only, and it is not
  recommended that full permission be given to all programs.

  For more information on policy files and permissions please see:

  http://java.sun.com/products/jdk/1.3/docs/guide/security/PolicyFiles.html

  http://java.sun.com/products/jdk/1.3/docs/guide/security/permissions.html

  2. Start the RMI Registry

  Log in to the remote machine where the image server will be running and start
  the RMI registry. For example, in the Solaris operating environment using a
  Bourne-compatible shell (e.g., /bin/sh):

    $ unset CLASSPATH
    $ rmiregistry &

  Note that the CLASSPATH environment variable is deliberately not set.

  3. Start the JAI Remote Image Server

  While still logged in to the remote server machine, set the CLASSPATH and
  LD_LIBRARY_PATH environment variables as required for JAI (see the INSTALL
  file) and start the remote imaging server:

    $ CLASSPATH=$JAI/lib/jai_core.jar:$JAI/lib/jai_codec.jar:\
                $JAI/lib/mlibwrapper_jai.jar
    $ export CLASSPATH
    $ LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$JAI/lib
    $ export LD_LIBRARY_PATH
    $ java \
    -Djava.rmi.server.codebase=\
    "file:$JAI/lib/jai_core.jar file:$JAI/lib/jai_codec.jar" \
    -Djava.rmi.server.useCodebaseOnly=false \
    -Djava.security.policy=file:$JAI/policy \
    com.sun.media.jai.rmi.JAIRMIImageServer

  For example, when the above steps are executed on a machine with IP address
  123.456.78.90 the following is printed:

    Server: using host 123.456.78.90 port 1099
    Registering image server as "rmi://123.456.78.90:1099/JAIRMIRemoteServer1.1".
    Server: Bound RemoteImageServer into the registry.

  4. Run the Local Application

  Run the local application making sure that the serverName parameter of any
  javax.media.jai.remote.RemoteJAI constructors corresponds to the machine on
  which the remote image server is running. For example, if the machine with IP
  address 123.456.78.90 above is named myserver the serverName parameter of any
  RemoteJAI constructors should be "myserver".

  How to Run the JAI 1.0.2 version of Remote Imaging

  For more information on RMI (remote method invocation) please refer to:
  http://java.sun.com/products/jdk/rmi/index.html

  1. Create a Security Policy File

  If $JAI is the base directory where Java Advanced Imaging is installed, create
  a text file named $JAI/policy containing the following:

  grant {
    // Allow everything for now
    permission java.security.AllPermission;
  };

  Note that this policy file is for testing purposes only.

  For more information on policy files and permissions please see:

  http://java.sun.com/products/jdk/1.2/docs/guide/security/PolicyFiles.html

  http://java.sun.com/products/jdk/1.2/docs/guide/security/permissions.html

  2. Start the RMI Registry

  Log in to the remote machine where the image server will be running and start
  the RMI registry. For example, in the Solaris operating environment using a
  Bourne-compatible shell (e.g., /bin/sh):

  $ unset CLASSPATH
  $ rmiregistry &

  Note that the CLASSPATH environment variable is deliberately not set.

  3. Start the JAI Remote Image Server

  While still logged in to the remote server machine, set the CLASSPATH and
  LD_LIBRARY_PATH environment variables as required for JAI (see the INSTALL
  file) and start the remote imaging server:

  $ CLASSPATH=$JAI/lib/jai_core.jar:$JAI/lib/jai_codec.jar:\
              $JAI/lib/mlibwrapper_jai.jar
  $ export CLASSPATH
  $ LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$JAI/lib
  $ export LD_LIBRARY_PATH
  $ java \
  -Djava.rmi.server.codebase=\
  "file:$JAI/lib/jai_core.jar file:$JAI/lib/jai_codec.jar" \
  -Djava.rmi.server.useCodebaseOnly=false \
  -Djava.security.policy=file:$JAI/policy \
  com.sun.media.jai.rmi.RMIImageImpl

  For example, when the above steps are executed on a machine with IP address
  123.456.78.90 the following is printed:

  Server: using host 123.456.78.90 port 1099
  Registering image server as
    "rmi://123.456.78.90:1099/RemoteImageServer".
  Server: Bound RemoteImageServer into
     the registry.

  4. Run the Local Application

  Run the local application making sure that the serverName parameter of any
  RemoteImage constructors corresponds to the machine on which the remote image
  server is running. For example, if the machine with IP address 123.456.78.90
  above is named myserver the serverName parameter of any RemoteImage()
  constructors should be "myserver".

  What's New

  This section describes the significant changes and improvements to the Java
  Advanced Imaging API and its reference implementation since the previous
  release.

  Core Classes

     * Internal Data Array Recycling

       To improve memory usage, the concept of "array recycling" was developed
       and implemented. Array recycling effectively traps tiles which will no
       longer be used. Subsequent tile, i.e., Raster creation attempts first to
       use the memory "salvaged" from these recycled tiles. Only if this is not
       possible will new data arrays be allocated.

       The internal arrays from recycled tiles are stored in a mapping from
       derived key values to References to the arrays. Thus these arrays are
       subject to garbage collection. The keys in the mapping are derived from
       the data type of the array, the number of data banks, and the size of the
       data banks. Maximal recycling therefore will occur when tiles having the
       same characteristics are used throughout an application.

       The only tiles which are recycled by default are those which are created
       within JAI and also go out of scope within JAI. This occurs for example in
       OpImage implementations which create Rasters to contain data cobbled from
       sources.

       In order to get more tile recycling, some action is required on the part
       of the developer:

         1. Set a RenderingHint.

            A mapping of the key JAI.KEY_CACHED_TILE_RECYCLING_ENABLED should be
            provided to the appropriate rendering hint, e.g., as

                // Enable recycling of cached tiles for all ops in this instance.
                JAI.getDefaultInstance().setRenderingHint(
                    JAI.KEY_CACHED_TILE_RECYCLING_ENABLED,
                    Boolean.TRUE);

                // Enable recycling of tiles for this op alone.
                ParameterBlock paramBlock;
                RenderingHints hints;
                hints.put(JAI.KEY_CACHED_TILE_RECYCLING_ENABLED, Boolean.TRUE);
                RenderedOp someOp = JAI.create("mosaic", paramBlock, hints);

            The effect of this will be to allow all tiles stored in a TileCache
            for a given image to be recycled when that image is finalized by the
            garbage collector.

         2. Invoke dispose() on defunct PlanarImages

            Invoking dispose() will cause the tiles to be flushed from the cache
            and recycled. Care should be taken when performing this procedure
            since unexpected results may occur if an application subsequently
            refers to a disposed image.

            For more information please refer to the documentation of the
            RenderingHints.Key definitions KEY_TILE_FACTORY, KEY_TILE_RECYCLER,
            and KEY_CACHED_TILE_RECYCLING_ENABLED in the JAI class, the interface
            definitions of TileRecycler and TileFactory and the class definition
            of RecyclingTileFactory, as well as the constructors of OpImage and
            PlanarImage, and finally the dispose() methods of PlanarImage,
            RenderedOp and OpImage.

     * Exception Handling

       To improve exception handling, an interface ImagingListener and a new
       class ImagingException are added in the package javax.media.jai.util. An
       ImagingListener provides the possibility to monitor, process, recover and
       log abnormal situations. An ImagingException holds its cause, so that its
       (root) cause can be retrieved. The class
       javax.media.jai.remote.RemoteImagingException is reparented from
       RuntimeException to ImagingException.

       These changes were made in response to customer comments observed on the
       jai-interest mailing list.

     * Type-safe Image create() Methods

       To each OperationDescriptor in the javax.media.jai.operator package was
       added a type-safe static create method for each supported mode of
       operation. The methods added are named as follows:

               Mode                    Method
       rendered             create()
       renderable           createRenderable()
       Collection           createCollection()
       renderableCollection createRenderableCollection()

       These convenience methods behave as the identically named static methods
       in the JAI class. Please refer to javax.media.jai.operator.*Descriptor for
       more details.

       These changes were made in response to customer comments observed on the
       jai-interest mailing list.

     * Expansion of IndexColor Data

       In the previous versions of JAI, the operators provided by JAI operated on
       the image's pixel data only. No color translation was performed prior to
       the actual computation by the operator, regardless of the type of the
       ColorModel an image had. If it was intended to have an operation performed
       on the color data, the color translation needed to be performed explicitly
       by the user prior to invoking the operation.

       This policy has been changed in JAI 1.1.2 to make handling sources with
       IndexColorModels more straightforward. A new RenderingHint
       JAI.KEY_REPLACE_INDEX_COLOR_MODEL has been provided that allows for
       automatic color translation for colormapped imagery in those situations
       where not doing so would result in unexpected / incorrect results (such as
       geometric operations). Operations that are implemented as subclasses of
       javax.media.jai.AreaOpImage and javax.media.jai.GeometricOpImage set this
       RenderingHint to true, such that these operations are performed correctly
       on the colormapped imagery, not treating the indices into the color map as
       pixel data. The user no longer needs to perform color translation before
       invoking such operations.

       For further details, please refer to Javadoc comments for the
       KEY_REPLACE_INDEX_COLOR_MODEL RenderingHints defined in
       javax.media.jai.JAI, Javadoc comments for the javax.media.jai.OpImage
       constructor, class comments for javax.media.jai.AreaOpImage,
       javax.media.jai.GeometricOpImage, and javax.media.jai.ScaleOpImage etc.

       The affected operations are affine, convolve, dilate, erode,
       filteredsubsample, gradientmagnitude, max, median, min, rotate, scale,
       shear, translate, transpose and warp. For further details, please refer to
       the class comments for the OperationDescriptors for these operations.

       One of the common uses of the format operator is to cast the pixel values
       of an image to a given data type. In such a case, the format operation
       adds a RenderingHints object for JAI.KEY_REPLACE_INDEX_COLOR_MODEL with
       the value of Boolean.TRUE, if the source image provided has an
       IndexColorModel. Due to the addition of this new RenderingHint, using the
       "format" operation with source(s) that have an IndexColorModel will cause
       the destination to have an expanded non-IndexColorModel ColorModel. This
       expansion ensures that the conversion to a different data type, ColorModel
       or SampleModel happens correctly such that the indices into the color map
       (for IndexColorModel images) are not treated as pixel data.

       These changes were made in response to customer comments observed on the
       jai-interest mailing list.

     * Real-valued DataBuffer Portability

       Some problems interoperating with JavaTM 2 version 1.4 were observed due
       to the classes DataBufferFloat and DataBufferDouble which are found in
       Java2D and in JAI. Internal changes in JAI were made such that floating
       point DataBuffers are handled using the reflection API. Users of JavaTM 2
       v1.4 should use the floating point DataBuffer classes in java.awt.image
       while users of earlier versions of JavaTM 2 should use those in JAI. Both
       should function equivalently.

       These changes were made in response to customer comments observed on the
       jai-interest mailing list.

     * Tile Dimension Clamping

       To optimize storage requirements for the results of an imaging operation,
       as of JAI 1.1.2, the destination image's tile dimensions are by default
       clamped to it's image dimensions when these are smaller, if the tile
       dimensions were not specified by the user or the operation itself.

       This change was made in response to customer comments observed on the
       jai-interest mailing list.

     * Suppression of Colormap Acceleration

       In the previous versions of JAI, to accelerate the ColormapOpImages, the
       transform is performed on the color map if the source and destination
       images are both color-indexed. To suppress the acceleration, a new type of
       rendering hint key, KEY_TRANSFORM_ON_COLORMAP, is defined. Operations to
       which this is pertinent are

       AddConst
       AndConst
       DivideIntoConst
       Exp
       Invert
       Log
       Lookup
       MultiplyConst
       Not
       OrConst
       Piecewise
       Rescale
       SubtractFromConst
       Threshold
       XorConst

       These changes were made in response to customer comments observed on the
       jai-interest mailing list.

     * Image Coordinate Mapping

       Forward and inverse coordinate mapping methods mapSourcePoint() and
       mapDestPoint(), respectively were added to RenderedOp, OpImage and its
       subclasses, and Warp and its subclasses. These are intended to allow
       mapping from destination to source images within rendered operation chains
       and from source to destination images depending on the invertibility of
       the transformation.

     * Destination Rectangle Mapping

       The specification of the method OpImage.mapDestRect() was clarified in
       general and specifically with respect to the case wherein the source
       rectangle can be determined but has an empty intersection with the actual
       source image bounds.

     * ColorSpaceJAI and IHSColorSpace

       The non-linear transformation of the sRGB color space conversion was
       implemented and the overall specification of the sRGB-CIEXYZ color
       conversion was clarified. The implementation was changed to match this
       specification change.

     * ColorModelFactory

       A new interface javax.media.jai.ColorModelFactory was added to provide
       more fine-grained control over creating the ColorModel of an OpImage. For
       more information please refer to the ColorModelFactory class documentation
       as well as the links to be found to therein.

     * TileCache and TileCache Key Properties

       Properties named "tile_cache_key" and "tile_cache" were added to the list
       of synthetic properties emitted by a RenderedOp. These properties have
       values which are instances of RenderedImage and TileCache, respectively.
       For more information please refer to the class documentation of
       RenderedOp. The purpose of these properties is to provide a reliable
       mechanism for obtaining the cache used by the rendering of a RenderedOp as
       well as the key used therewith.

     * TileScheduler ThreadGroups

       ThreadGroups were added to allow observation of the scheduler threads.
       There is a single ThreadGroup named

       "SunTileScheduler"+instanceIndex

       where instanceIndex is initially zero and is incremented for each
       instance, and a thread group for standard and prefetch threads which are
       respectively named

       "SunTileScheduler"+instanceIndex+"Standard"
       "SunTileScheduler"+instanceIndex+"Prefetch"

     * ImageAdapter Classes

       Added getWrappedImage() method to each of RenderedImageAdapter,
       RenderableImageAdapter, and WritableRenderedImageAdapter.

     * BorderExtenderConstant

       Added getConstants() method.

     * getImageID()

       A new public method getImageID() was added to PlanarImage and
       SerializableRenderedImage. This was in response to a customer-reported
       problem wherein the value returned by hashCode() did not guarantee
       sufficient uniqueness of keys of tiles in the TileCache when the
       application was run for an extended period. The default JAI TileCache has
       been changed to use this new ID type.

  Operations

     * New Operations

          o ColorQuantizer

            This operation generates a LookupTableJAI-valued property which may
            be used to quantize the colors in an image via the ErrorDiffusion
            operation. The operation may also be used to apply this same colormap
            to generate a color quantized image using the nearest color approach.
            Color quantization algorithms supported are Median Cut, Oct-tree, and
            Neural Network. Only a Java implementation is provided. Please refer
            to javax.media.jai.operator.ColorQuantizer for the details.

            This operation was added in response to customer comments observed on
            the jai-interest mailing list.

          o Mosaic

            This operation combines two or more source images to create a montage
            or image mosaic depending on the supplied parameters. Both native and
            Java implementations are provided. Please refer to
            javax.media.jai.operator.MosaicDescriptor for the details.

          o SubsampleAverage

            This operation subsamples an image by averaging over a
            scale-dependent moving window. Both native and Java implementations
            are provided. Please refer to
            javax.media.jai.operator.SubsampleAverageDescriptor for the details.
            This operation should prove quite useful in generating high quality
            thumbnail images and in scaling down bilevel images such as
            documents.

            This operation was added in response to customer comments observed on
            the jai-interest mailing list.

     * Modifications of Existing Operations

          o Geometric Operations

            A double[]-valued parameter backgroundValues was appended to the
            parameter list of each of the "Affine", "Rotate", "Shear", and "Warp"
            operations. The value so specified will be used to fill all pixels in
            the destination image the locations of which cannot be backward
            mapped to a source image position amenable to interpolation.

            These changes were made in response to customer comments observed on
            the jai-interest mailing list.

          o Composite

            The specification of the "composite" operation is updated such that
            the source1Alpha and source1Alpha parameters are RenderedImages in
            the "rendered" mode and are RenderableImages in the "renderable"
            mode.

          o Extrema

            The operation was changed to allow the locations of extrema to be
            obtained.Each location is saved as a run length code. A boolean
            parameter saveLocations indicates whether to save the locations of
            the extrema and an integer parameter maxRuns specifies the maximum
            number of run lengths to save. The locations of minima are available
            on the operation node as a List-valued property named minLocations
            and the locations of the maxima are available as a List-valued
            property named maxLocations.

          o Filestore

            A pair of modifications were made to this opertion.

            Firstly, the FileStore operation formerly threw an
            IllegalArgumentException if the operation was created on a client and
            the path existed only on the server. This was fixed by appending a
            Boolean parameter called checkFileLocally to the parameter list. The
            use of this parameter is self-descriptive. Please refer to
            javax.media.jai.operator.FileStoreDescriptor for more information on
            the operation.

            Secondly, the operation was modified to use a SeekableOutputStream so
            that (TIFF) compression may be effected with less effort.

          o FilteredSubsample

            A scale-dependent default value was added for the quadrant symmetric
            filter parameter. This should improve the usability of this operation
            as the developer no longer is required to derive any filter
            coefficients.

            This operation was modified in response to customer comments observed
            on the jai-interest mailing list.

          o Histogram

            Native acceleration support was added for the cases of non-floating
            point data.

          o Scale

            The specification of the scale operation has been updated such that
            the resultant image dimensions are no longer dependent on the
            interpolation scheme used in the scale operation. Please refer to
            javax.media.jai.operator.ScaleDescriptor and
            javax.media.jai.ScaleOpImage for details on the new specification.

            This operation was modified in response to customer comments observed
            on the jai-interest mailing list.

  Network Imaging

     * Server Configuration

       This release provides options for configuring the Remote Imaging server
       for the "jairmi" protocol that is provided with JAI. These server
       configuration parameters can be specified via the command line when
       starting the server. All the command line options are detailed in the
       Javadoc for javax.media.jai.remote.JAIRMIDescriptor

       Another mechanism to perform server configuration is by implemeting the
       JAIServerConfigurationSpi interface and putting the implementation on the
       CLASSPATH. For further details please refer to
       javax.media.jai.remote.JAIRMIDescriptor and
       com.sun.media.jai.remote.JAIServerConfigurationSpi Javadoc.

  Widget Package

     * com.sun.media.jai.widget Package

       This package was added containing for the time being the single class
       DisplayJAI which has been previously supplied to the JAI mailing list. It
       is likely that the current content of the deprecated package
       javax.media.jai.widget will be moved to this package eventually.

  Fixed Bugs

  Many problems originally reported as bugs have actually been fixed by virtue of
  the changes described above. Some of the other salient problems which have also
  been fixed include the following.

     * Native implementation of the SubsampleBinaryToGray operation throws an
       ArrayIndexOutOfBoundsException.

       This was observed by a customer processing document images.

     * TiledImageGraphics cannot draw objects correctly if a transform is done on
       it.

       This was observed by a customer as a discrepancy with respect to
       Graphics2D.

     * JAI may not work with JRE due to missing default ICC profiles.

       This problem was observed by a customer when using a version of the JRE
       some of which do not include in particular the PYCC profile.

     * ClassCastException for multi-source point ops with non- PlanarImage
       sources.

       This bug was observed by a customer attempting to take the "max" of two
       BufferedImages.

     * Eliminate window pop-up on Windows when using native acceleration.

       Customers reported observing a black window pop up and disappear. This was
       due to the application used to check for MMX availability. This
       application has been modified so that this does not occur.

     * Format operation did not convert an indexed-color image.

       When the Format operation was applied to an image having an
       IndexColorModel and RenderingHints specifying a 24-bit ColorModel and
       compatible SampleModel, the output image did not have the desired 24-bit
       ColorModel.

     * RenderableOp.createScaledRendering() did not produce an image with the
       desired dimensions.

       If the scale factors derived internally had a ratio within a tolerance of
       the unity value then one factor was changed. This computation has been
       modified not to change the derived scale factors.

  Copyright 2002 Sun Microsystems, Inc. All rights reserved. Use is subject to
  license terms. Third-party software, including font technology, is copyrighted
  and licensed from Sun suppliers. Portions may be derived from Berkeley BSD
  systems, licensed from U. of CA. Sun, Sun Microsystems, the Sun logo, Java, and
  Solaris are trademarks or registered trademarks of Sun Microsystems, Inc. in
  the U.S. and other countries. Federal Acquisitions: Commercial Software -
  Government Users Subject to Standard License Terms and Conditions.

===========================================================================
To unsubscribe, send email to [EMAIL PROTECTED] and include in the body
of the message "signoff JAVA2D-INTEREST".  For general help, send email to
[EMAIL PROTECTED] and include in the body of the message "help".

Reply via email to