You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
170 lines
6.9 KiB
170 lines
6.9 KiB
/* |
|
* Copyright (c) 2001 Sun Microsystems, Inc. All Rights Reserved. |
|
* |
|
* Redistribution and use in source and binary forms, with or without |
|
* modification, are permitted provided that the following conditions are met: |
|
* |
|
* -Redistributions of source code must retain the above copyright notice, this |
|
* list of conditions and the following disclaimer. |
|
* |
|
* -Redistribution in binary form must reproduct the above copyright notice, |
|
* this list of conditions and the following disclaimer in the documentation |
|
* and/or other materials provided with the distribution. |
|
* |
|
* Neither the name of Sun Microsystems, Inc. or the names of contributors may |
|
* be used to endorse or promote products derived from this software without |
|
* specific prior written permission. |
|
* |
|
* This software is provided "AS IS," without a warranty of any kind. ALL |
|
* EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, INCLUDING ANY |
|
* IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR |
|
* NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN AND ITS LICENSORS SHALL NOT BE |
|
* LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING |
|
* OR DISTRIBUTING THE SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR ITS |
|
* LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR DIRECT, |
|
* INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER |
|
* CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT OF THE USE OF |
|
* OR INABILITY TO USE SOFTWARE, EVEN IF SUN HAS BEEN ADVISED OF THE |
|
* POSSIBILITY OF SUCH DAMAGES. |
|
* |
|
* You acknowledge that Software is not designed,licensed or intended for use in |
|
* the design, construction, operation or maintenance of any nuclear facility. |
|
*/ |
|
|
|
/** |
|
* An instance of <code>ImageDecodeParam</code> for decoding images in |
|
* the TIFF format. |
|
* |
|
* <p> To determine the number of images present in a TIFF file, use |
|
* the <code>getNumPages()</code> method on the |
|
* <code>ImageDecoder</code> object that will be used to perform the |
|
* decoding. The desired page number may be passed as an argument to |
|
* the <code>ImageDecoder.decodeAsRaster)()</code> or |
|
* <code>decodeAsRenderedImage()</code> methods. |
|
* |
|
* <p> For TIFF Palette color images, the colorMap always has entries |
|
* of short data type, the color Black being represented by 0,0,0 and |
|
* White by 65536,65536,65536. In order to display these images, the |
|
* default behavior is to dither the short values down to 8 bits. |
|
* The dithering is done by calling the <code>decode16BitsTo8Bits</code> |
|
* method for each short value that needs to be dithered. The method has |
|
* the following implementation: |
|
* <code> |
|
* byte b; |
|
* short s; |
|
* s = s & 0xffff; |
|
* b = (byte)((s >> 8) & 0xff); |
|
* </code> |
|
* If a different algorithm is to be used for the dithering, this class |
|
* should be subclassed and an appropriate implementation should be |
|
* provided for the <code>decode16BitsTo8Bits</code> method in the subclass. |
|
* |
|
* <p>If the palette contains image data that is signed short, as specified |
|
* by the SampleFormat tag, the dithering is done by calling |
|
* <code>decodeSigned16BitsTo8Bits</code> instead. The method has the |
|
* following implementation: |
|
* <code> |
|
* byte b; |
|
* short s; |
|
* b = (byte)((s + Short.MIN_VALUE) >> 8); |
|
* </code> |
|
* In order to use a different algorithm for the dithering, this class |
|
* should be subclassed and the method overridden. |
|
* |
|
* <p> If it is desired that the Palette be decoded such that the output |
|
* image is of short data type and no dithering is performed, the |
|
* <code>setDecodePaletteAsShorts</code> method should be used. |
|
* |
|
* <p><b> This class is not a committed part of the JAI API. It may |
|
* be removed or changed in future releases of JAI.</b> |
|
* |
|
* @see TIFFDirectory |
|
*/ |
|
package com.fr.third.JAI; |
|
public class TIFFDecodeParam implements ImageDecodeParam { |
|
|
|
private boolean decodePaletteAsShorts = false; |
|
private Long ifdOffset = null; |
|
private boolean convertJPEGYCbCrToRGB = true; |
|
|
|
/** Constructs a default instance of <code>TIFFDecodeParam</code>. */ |
|
public TIFFDecodeParam() { |
|
} |
|
|
|
/** |
|
* If set, the entries in the palette will be decoded as shorts |
|
* and no short to byte lookup will be applied to them. |
|
*/ |
|
public void setDecodePaletteAsShorts(boolean decodePaletteAsShorts) { |
|
this.decodePaletteAsShorts = decodePaletteAsShorts; |
|
} |
|
|
|
/** |
|
* Returns <code>true</code> if palette entries will be decoded as |
|
* shorts, resulting in an output image with short datatype. |
|
*/ |
|
public boolean getDecodePaletteAsShorts() { |
|
return decodePaletteAsShorts; |
|
} |
|
|
|
/** |
|
* Returns an unsigned 8 bit value computed by dithering the unsigned |
|
* 16 bit value. Note that the TIFF specified short datatype is an |
|
* unsigned value, while Java's <code>short</code> datatype is a |
|
* signed value. Therefore the Java <code>short</code> datatype cannot |
|
* be used to store the TIFF specified short value. A Java |
|
* <code>int</code> is used as input instead to this method. The method |
|
* deals correctly only with 16 bit unsigned values. |
|
*/ |
|
public byte decode16BitsTo8Bits(int s) { |
|
return (byte)((s >> 8) & 0xffff); |
|
} |
|
|
|
/** |
|
* Returns an unsigned 8 bit value computed by dithering the signed |
|
* 16 bit value. This method deals correctly only with values in the |
|
* 16 bit signed range. |
|
*/ |
|
public byte decodeSigned16BitsTo8Bits(short s) { |
|
return (byte)((s + Short.MIN_VALUE) >> 8); |
|
} |
|
|
|
/** |
|
* Sets the offset in the stream from which to read the image. There |
|
* must be an Image File Directory (IFD) at that position or an error |
|
* will occur. If <code>setIFDOffset()</code> is never invoked then |
|
* the decoder will assume that the TIFF stream is at the beginning of |
|
* the 8-byte image header. If the directory offset is set and a page |
|
* number is supplied to the TIFF <code>ImageDecoder</code> then the |
|
* page will be the zero-relative index of the IFD in linked list of |
|
* IFDs beginning at the specified offset with a page of zero indicating |
|
* the directory at that offset. |
|
*/ |
|
public void setIFDOffset(long offset) { |
|
ifdOffset = new Long(offset); |
|
} |
|
|
|
/** |
|
* Returns the value set by <code>setIFDOffset()</code> or |
|
* <code>null</code> if no value has been set. |
|
*/ |
|
public Long getIFDOffset() { |
|
return ifdOffset; |
|
} |
|
|
|
/** |
|
* Sets a flag indicating whether to convert JPEG-compressed YCbCr data |
|
* to RGB. The default value is <code>true</code>. This flag is |
|
* ignored if the image data are not JPEG-compressed. |
|
*/ |
|
public void setJPEGDecompressYCbCrToRGB(boolean convertJPEGYCbCrToRGB) { |
|
this.convertJPEGYCbCrToRGB = convertJPEGYCbCrToRGB; |
|
} |
|
|
|
/** |
|
* Whether JPEG-compressed YCbCr data will be converted to RGB. |
|
*/ |
|
public boolean getJPEGDecompressYCbCrToRGB() { |
|
return convertJPEGYCbCrToRGB; |
|
} |
|
}
|
|
|