帆软使用的第三方框架。
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.

171 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;
}
}