
icc.lut.LookUpTable16Interp Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of jj2000 Show documentation
Show all versions of jj2000 Show documentation
Fork of jpeg2k code from https://code.google.com/p/jj2000/.
This is a dependency for support of compression in Grib2 files in netCDF-java and TDS.
We welcome bug fixes and other contributions to this code.
The newest version!
/*****************************************************************************
*
* $Id: LookUpTable16Interp.java,v 1.1 2002/07/25 14:56:46 grosbois Exp $
*
* Copyright Eastman Kodak Company, 343 State Street, Rochester, NY 14650
* $Date $
*****************************************************************************/
package icc.lut;
import icc .tags.ICCCurveType;
/**
* An interpolated 16 bit lut
*
* @version 1.0
* @author Bruce A.Kern
*/
public class LookUpTable16Interp extends LookUpTable16 {
/**
* Construct the lut from the curve data
* @oaram curve the data
* @oaram dwNumInput the lut size
* @oaram dwMaxOutput the lut max value
*/
public LookUpTable16Interp (
ICCCurveType curve,
int dwNumInput,
int dwMaxOutput
) {
super (curve, dwNumInput, dwMaxOutput);
int dwLowIndex, dwHighIndex; // Indices of interpolation points
double dfLowIndex, dfHighIndex; // FP indices of interpolation points
double dfTargetIndex; // Target index into interpolation table
double dfRatio; // Ratio of LUT input points to curve values
double dfLow, dfHigh; // Interpolation values
double dfOut; // Output LUT value
dfRatio = (double)(curve.count-1) / (double)(dwNumInput - 1);
for (int i = 0; i < dwNumInput; i++) {
dfTargetIndex = (double) i * dfRatio;
dfLowIndex = Math.floor(dfTargetIndex);
dwLowIndex = (int) dfLowIndex;
dfHighIndex = Math.ceil(dfTargetIndex);
dwHighIndex = (int) dfHighIndex;
if (dwLowIndex == dwHighIndex) dfOut = ICCCurveType.CurveToDouble(curve.entry(dwLowIndex));
else {
dfLow = ICCCurveType.CurveToDouble(curve.entry(dwLowIndex));
dfHigh = ICCCurveType.CurveToDouble(curve.entry(dwHighIndex));
dfOut = dfLow + (dfHigh - dfLow) * (dfTargetIndex - dfLowIndex); }
lut[i] = (short)Math.floor(dfOut * dwMaxOutput + 0.5); }}
/* end class LookUpTable16Interp */ }
© 2015 - 2025 Weber Informatics LLC | Privacy Policy