01: /*
02: * Licensed to the Apache Software Foundation (ASF) under one or more
03: * contributor license agreements. See the NOTICE file distributed with
04: * this work for additional information regarding copyright ownership.
05: * The ASF licenses this file to You under the Apache License, Version 2.0
06: * (the "License"); you may not use this file except in compliance with
07: * the License. You may obtain a copy of the License at
08: *
09: * http://www.apache.org/licenses/LICENSE-2.0
10: *
11: * Unless required by applicable law or agreed to in writing, software
12: * distributed under the License is distributed on an "AS IS" BASIS,
13: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14: * See the License for the specific language governing permissions and
15: * limitations under the License.
16: */
17:
18: /* $Id: TIFFImageDecoder.java 447277 2006-09-18 06:19:34Z jeremias $ */
19:
20: package org.apache.xmlgraphics.image.codec.tiff;
21:
22: import java.awt.image.RenderedImage;
23: import java.io.IOException;
24:
25: import org.apache.xmlgraphics.image.codec.util.ImageDecodeParam;
26: import org.apache.xmlgraphics.image.codec.util.ImageDecoderImpl;
27: import org.apache.xmlgraphics.image.codec.util.SeekableStream;
28:
29: /**
30: * A baseline TIFF reader. The reader has some functionality in addition to
31: * the baseline specifications for Bilevel images, for which the group 3 and
32: * group 4 decompression schemes have been implemented. Support for LZW
33: * decompression has also been added. Support for Horizontal differencing
34: * predictor decoding is also included, when used with LZW compression.
35: * However, this support is limited to data with bitsPerSample value of 8.
36: * When reading in RGB images, support for alpha and extraSamples being
37: * present has been added. Support for reading in images with 16 bit samples
38: * has been added. Support for the SampleFormat tag (signed samples as well
39: * as floating-point samples) has also been added. In all other cases, support
40: * is limited to Baseline specifications.
41: *
42: *
43: */
44: public class TIFFImageDecoder extends ImageDecoderImpl {
45:
46: // All the TIFF tags that we care about
47: public static final int TIFF_IMAGE_WIDTH = 256;
48: public static final int TIFF_IMAGE_LENGTH = 257;
49: public static final int TIFF_BITS_PER_SAMPLE = 258;
50: public static final int TIFF_COMPRESSION = 259;
51: public static final int TIFF_PHOTOMETRIC_INTERPRETATION = 262;
52: public static final int TIFF_FILL_ORDER = 266;
53: public static final int TIFF_STRIP_OFFSETS = 273;
54: public static final int TIFF_SAMPLES_PER_PIXEL = 277;
55: public static final int TIFF_ROWS_PER_STRIP = 278;
56: public static final int TIFF_STRIP_BYTE_COUNTS = 279;
57: public static final int TIFF_X_RESOLUTION = 282;
58: public static final int TIFF_Y_RESOLUTION = 283;
59: public static final int TIFF_PLANAR_CONFIGURATION = 284;
60: public static final int TIFF_T4_OPTIONS = 292;
61: public static final int TIFF_T6_OPTIONS = 293;
62: public static final int TIFF_RESOLUTION_UNIT = 296;
63: public static final int TIFF_PREDICTOR = 317;
64: public static final int TIFF_COLORMAP = 320;
65: public static final int TIFF_TILE_WIDTH = 322;
66: public static final int TIFF_TILE_LENGTH = 323;
67: public static final int TIFF_TILE_OFFSETS = 324;
68: public static final int TIFF_TILE_BYTE_COUNTS = 325;
69: public static final int TIFF_EXTRA_SAMPLES = 338;
70: public static final int TIFF_SAMPLE_FORMAT = 339;
71: public static final int TIFF_S_MIN_SAMPLE_VALUE = 340;
72: public static final int TIFF_S_MAX_SAMPLE_VALUE = 341;
73:
74: public TIFFImageDecoder(SeekableStream input, ImageDecodeParam param) {
75: super (input, param);
76: }
77:
78: public int getNumPages() throws IOException {
79: return TIFFDirectory.getNumDirectories(input);
80: }
81:
82: public RenderedImage decodeAsRenderedImage(int page)
83: throws IOException {
84: if ((page < 0) || (page >= getNumPages())) {
85: throw new IOException("TIFFImageDecoder0");
86: }
87: return new TIFFImage(input, (TIFFDecodeParam) param, page);
88: }
89: }
|