Package org.libtiff.jai.codecimpl

Source Code of org.libtiff.jai.codecimpl.XTIFFFaxTileCodec

package org.libtiff.jai.codecimpl;

import java.awt.Rectangle;

import org.libtiff.jai.codec.XTIFF;
import org.libtiff.jai.codec.XTIFFField;
import org.libtiff.jai.codec.XTIFFTileCodec;
import org.libtiff.jai.codec.XTIFFTileCodecImpl;

/**
* This codec encapsulates all the logic for the TIFF "lzw" decoding codec
* algorithm.
*/
public class XTIFFFaxTileCodec extends XTIFFTileCodecImpl {

    private XTIFFFaxDecoder decoder = null;

    // Fax compression related variables
    long tiffT4Options;
    long tiffT6Options;
    int fillOrder;

    /**
     * Public constructor
     */
    public XTIFFFaxTileCodec() {}

    /**
     * Creation method
     */
    public XTIFFTileCodec create() {
        return new XTIFFFaxTileCodec();
    }

    public boolean canEncode() {
        return false;
    }

    /**
     * Registration method
     */
    public void register() {
        register(XTIFF.COMPRESSION_FAX_G3_1D);
        register(XTIFF.COMPRESSION_FAX_G3_2D);
        register(XTIFF.COMPRESSION_FAX_G4_2D);
    }

    /**
     * The initialization method particular to Fax decoding.
     */
    public void initializeDecoding() {

        XTIFFField fillOrderField = directory.getField(XTIFF.TIFFTAG_FILL_ORDER);
        if (fillOrderField != null) {
            fillOrder = fillOrderField.getAsInt(0);
        } else {
            // Default Fill Order
            fillOrder = 1;
        }
        // Fax T.4 compression options
        if (compression == 3) {
            XTIFFField t4OptionsField = directory.getField(XTIFF.TIFFTAG_T4_OPTIONS);
            if (t4OptionsField != null) {
                tiffT4Options = t4OptionsField.getAsLong(0);
            } else {
                // Use default value
                tiffT4Options = 0;
            }
        }

        // Fax T.6 compression options
        if (compression == 4) {
            XTIFFField t6OptionsField = directory.getField(XTIFF.TIFFTAG_T6_OPTIONS);
            if (t6OptionsField != null) {
                tiffT6Options = t6OptionsField.getAsLong(0);
            } else {
                // Use default value
                tiffT6Options = 0;
            }
        }

        decoder = new XTIFFFaxDecoder(fillOrder, tileWidth, tileLength);

    }

    /**
     * Decode a rectangle of pixels
     */
    public void decodeTilePixels(byte[] input, Rectangle newRect, byte[] bdata) {
        if (compression == XTIFF.COMPRESSION_FAX_G3_1D) {
            decoder.decode1D(bdata, input, newRect.x, newRect.height);
        } else if (compression == XTIFF.COMPRESSION_FAX_G3_2D) {
            decoder.decode2D(bdata,
                    input,
                    newRect.x,
                    newRect.height,
                    tiffT4Options);
        } else if (compression == XTIFF.COMPRESSION_FAX_G4_2D) {
            decoder.decodeT6(bdata,
                    input,
                    newRect.x,
                    newRect.height,
                    tiffT6Options);
        }
    }

    /**
     * Decode a rectangle of pixels
     */
    public void decodeTilePixels(byte[] input, Rectangle newRect, short[] sdata) {
    // not used for fax.
    }
}
TOP

Related Classes of org.libtiff.jai.codecimpl.XTIFFFaxTileCodec

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.