Package com.sun.pdfview.function

Source Code of com.sun.pdfview.function.FunctionType2

/*
* $Id: FunctionType2.java,v 1.2 2007-12-20 18:33:34 rbair Exp $
*
* Copyright 2004 Sun Microsystems, Inc., 4150 Network Circle,
* Santa Clara, California 95054, U.S.A. All rights reserved.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
*/

package com.sun.pdfview.function;

import java.io.IOException;

import com.sun.pdfview.PDFObject;
import com.sun.pdfview.PDFParseException;

/**
* A type 2 function is an exponential interpolation function, which maps
* from one input value to n output values using a simple exponential
* formula.
*/
public class FunctionType2 extends PDFFunction {
    /** the function's value at zero for the n outputs */
    private float[] c0 = new float[] { 0f };
   
    /** the function's value at one for the n outputs */
    private float[] c1 = new float[] { 1f };
   
    /** the exponent */
    private float n;
   
    /** Creates a new instance of FunctionType2 */
    public FunctionType2() {
        super(TYPE_2);
    }
   
    /**
     * Read the zeros, ones and exponent
     */
    protected void parse(PDFObject obj) throws IOException
    {
        // read the exponent (required)
        PDFObject nObj = obj.getDictRef("N");
        if (nObj == null) {
            throw new PDFParseException("Exponent required for function type 2!");
        }
        setN(nObj.getFloatValue());
       
        // read the zeros array (optional)
        PDFObject cZeroObj = obj.getDictRef("C0");
        if (cZeroObj != null) {
            PDFObject[] cZeroAry = cZeroObj.getArray();
            float[] cZero = new float[cZeroAry.length];
            for (int i = 0; i < cZeroAry.length; i++) {
                cZero[i] = cZeroAry[i].getFloatValue();
            }
            setC0(cZero);
        }
       
        // read the ones array (optional)
        PDFObject cOneObj = obj.getDictRef("C1");
        if (cOneObj != null) {
            PDFObject[] cOneAry = cOneObj.getArray();
            float[] cOne = new float[cOneAry.length];
            for (int i = 0; i < cOneAry.length; i++) {
                cOne[i] = cOneAry[i].getFloatValue();
            }
            setC1(cOne);
        }
    }
   
    /**
     * Calculate the function value for the input.  For each output (j),
     * the function value is:
     * C0(j) + x^N * (C1(j) - C0(j))
     */
    protected void doFunction(float[] inputs, int inputOffset,
                              float[] outputs, int outputOffset)
    {
        // read the input value
        float input = inputs[inputOffset];
       
        // calculate the output values
        for (int i = 0; i < getNumOutputs(); i++) {
            outputs[i + outputOffset] = getC0(i) +
                (float) (Math.pow(input, getN()) * (getC1(i) - getC0(i)));
        }
    }
   
    /**
     * Get the exponent
     */
    public float getN() {
        return n;
    }
   
    /**
     * Set the exponent
     */
    protected void setN(float n) {
        this.n = n;
    }
   
    /**
     * Get the values at zero
     */
    public float getC0(int index) {
        return c0[index];
    }
   
    /**
     * Set the values at zero
     */
    protected void setC0(float[] c0) {
        this.c0 = c0;
    }
   
    /**
     * Get the values at one
     */
    public float getC1(int index) {
        return c1[index];
    }
   
    /**
     * Set the values at one
     */
    protected void setC1(float[] c1) {
        this.c1 = c1;
   
}
TOP

Related Classes of com.sun.pdfview.function.FunctionType2

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.