TIFFDecodeParam.java
上传用户:btjssb159
上传日期:2018-01-04
资源大小:241k
文件大小:7k
源码类别:

DNA

开发平台:

Java

  1. /*
  2.  * Copyright (c) 2001 Sun Microsystems, Inc. All Rights Reserved.
  3.  *
  4.  * Redistribution and use in source and binary forms, with or without 
  5.  * modification, are permitted provided that the following conditions are met:
  6.  * 
  7.  * -Redistributions of source code must retain the above copyright notice, this 
  8.  * list of conditions and the following disclaimer.
  9.  *
  10.  * -Redistribution in binary form must reproduct the above copyright notice,
  11.  * this list of conditions and the following disclaimer in the documentation
  12.  * and/or other materials provided with the distribution.
  13.  * 
  14.  * Neither the name of Sun Microsystems, Inc. or the names of contributors may
  15.  * be used to endorse or promote products derived from this software without
  16.  * specific prior written permission.
  17.  * 
  18.  * This software is provided "AS IS," without a warranty of any kind. ALL
  19.  * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, INCLUDING ANY
  20.  * IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR
  21.  * NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN AND ITS LICENSORS SHALL NOT BE
  22.  * LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING
  23.  * OR DISTRIBUTING THE SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR ITS
  24.  * LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR DIRECT,
  25.  * INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER
  26.  * CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT OF THE USE OF
  27.  * OR INABILITY TO USE SOFTWARE, EVEN IF SUN HAS BEEN ADVISED OF THE
  28.  * POSSIBILITY OF SUCH DAMAGES.
  29.  * 
  30.  * You acknowledge that Software is not designed,licensed or intended for use in 
  31.  * the design, construction, operation or maintenance of any nuclear facility.
  32.  */
  33. /**
  34.  * An instance of <code>ImageDecodeParam</code> for decoding images in
  35.  * the TIFF format.
  36.  *
  37.  * <p> To determine the number of images present in a TIFF file, use
  38.  * the <code>getNumPages()</code> method on the
  39.  * <code>ImageDecoder</code> object that will be used to perform the
  40.  * decoding.  The desired page number may be passed as an argument to
  41.  * the <code>ImageDecoder.decodeAsRaster)()</code> or
  42.  * <code>decodeAsRenderedImage()</code> methods.
  43.  *
  44.  * <p> For TIFF Palette color images, the colorMap always has entries
  45.  * of short data type, the color Black being represented by 0,0,0 and 
  46.  * White by 65536,65536,65536. In order to display these images, the 
  47.  * default behavior is to dither the short values down to 8 bits. 
  48.  * The dithering is done by calling the <code>decode16BitsTo8Bits</code> 
  49.  * method for each short value that needs to be dithered. The method has
  50.  * the following implementation:
  51.  * <code>
  52.  *       byte b;
  53.  *       short s;
  54.  *       s = s & 0xffff;
  55.  *       b = (byte)((s >> 8) & 0xff);
  56.  * </code>
  57.  * If a different algorithm is to be used for the dithering, this class
  58.  * should be subclassed and an appropriate implementation should be
  59.  * provided for the <code>decode16BitsTo8Bits</code> method in the subclass.
  60.  *
  61.  * <p>If the palette contains image data that is signed short, as specified
  62.  * by the SampleFormat tag, the dithering is done by calling 
  63.  * <code>decodeSigned16BitsTo8Bits</code> instead. The method has the 
  64.  * following implementation:
  65.  * <code>
  66.  *       byte b;
  67.  *       short s;
  68.  *       b = (byte)((s + Short.MIN_VALUE) >> 8);
  69.  * </code>
  70.  * In order to use a different algorithm for the dithering, this class 
  71.  * should be subclassed and the method overridden.
  72.  *
  73.  * <p> If it is desired that the Palette be decoded such that the output
  74.  * image is of short data type and no dithering is performed, the 
  75.  * <code>setDecodePaletteAsShorts</code> method should be used. 
  76.  *
  77.  * <p><b> This class is not a committed part of the JAI API.  It may
  78.  * be removed or changed in future releases of JAI.</b>
  79.  *
  80.  * @see TIFFDirectory
  81.  */
  82. public class TIFFDecodeParam implements ImageDecodeParam {
  83.     private boolean decodePaletteAsShorts = false;
  84.     private Long ifdOffset = null;
  85.     private boolean convertJPEGYCbCrToRGB = true;
  86.     
  87.     /** Constructs a default instance of <code>TIFFDecodeParam</code>. */
  88.     public TIFFDecodeParam() {
  89.     }
  90.     /** 
  91.      * If set, the entries in the palette will be decoded as shorts
  92.      * and no short to byte lookup will be applied to them.
  93.      */
  94.     public void setDecodePaletteAsShorts(boolean decodePaletteAsShorts) {
  95. this.decodePaletteAsShorts = decodePaletteAsShorts;
  96.     }
  97.     
  98.     /**
  99.      * Returns <code>true</code> if palette entries will be decoded as
  100.      * shorts, resulting in an output image with short datatype.
  101.      */ 
  102.     public boolean getDecodePaletteAsShorts() {
  103. return decodePaletteAsShorts;
  104.     }
  105.     /** 
  106.      * Returns an unsigned 8 bit value computed by dithering the unsigned 
  107.      * 16 bit value. Note that the TIFF specified short datatype is an
  108.      * unsigned value, while Java's <code>short</code> datatype is a 
  109.      * signed value. Therefore the Java <code>short</code> datatype cannot
  110.      * be used to store the TIFF specified short value. A Java 
  111.      * <code>int</code> is used as input instead to this method. The method
  112.      * deals correctly only with 16 bit unsigned values.
  113.      */
  114.     public byte decode16BitsTo8Bits(int s) {
  115. return (byte)((s >> 8) & 0xffff);
  116.     }
  117.     /** 
  118.      * Returns an unsigned 8 bit value computed by dithering the signed 
  119.      * 16 bit value. This method deals correctly only with values in the 
  120.      * 16 bit signed range.
  121.      */
  122.     public byte decodeSigned16BitsTo8Bits(short s) {
  123. return (byte)((s + Short.MIN_VALUE) >> 8);
  124.     }
  125.     /**
  126.      * Sets the offset in the stream from which to read the image.  There
  127.      * must be an Image File Directory (IFD) at that position or an error
  128.      * will occur.  If <code>setIFDOffset()</code> is never invoked then
  129.      * the decoder will assume that the TIFF stream is at the beginning of
  130.      * the 8-byte image header.  If the directory offset is set and a page
  131.      * number is supplied to the TIFF <code>ImageDecoder</code> then the
  132.      * page will be the zero-relative index of the IFD in linked list of
  133.      * IFDs beginning at the specified offset with a page of zero indicating
  134.      * the directory at that offset.
  135.      */
  136.     public void setIFDOffset(long offset) {
  137.         ifdOffset = new Long(offset);
  138.     }
  139.     /**
  140.      * Returns the value set by <code>setIFDOffset()</code> or
  141.      * <code>null</code> if no value has been set.
  142.      */
  143.     public Long getIFDOffset() {
  144.         return ifdOffset;
  145.     }
  146.     /**
  147.      * Sets a flag indicating whether to convert JPEG-compressed YCbCr data
  148.      * to RGB.  The default value is <code>true</code>.  This flag is
  149.      * ignored if the image data are not JPEG-compressed.
  150.      */
  151.     public void setJPEGDecompressYCbCrToRGB(boolean convertJPEGYCbCrToRGB) {
  152.         this.convertJPEGYCbCrToRGB = convertJPEGYCbCrToRGB;
  153.     }
  154.     /**
  155.      * Whether JPEG-compressed YCbCr data will be converted to RGB.
  156.      */
  157.     public boolean getJPEGDecompressYCbCrToRGB() {
  158.         return convertJPEGYCbCrToRGB;
  159.     }
  160. }