package whitebox.geospatialfiles;
public class CreatePixelsContinuous {
private int[] pixelData;
private int[] mPaletteData;
private int mStartRow;
private int mStartCol;
private int mEndRow;
private int mEndCol;
private WhiteboxRasterInfo mWB;
private int resolutionFactor;
private double noDataValue;
private int numPaletteEntriesLessOne;
private double range;
private double minVal;
private double maxVal;
private double mGamma;
private double[] data;
private int mBackgroundColour;
private int imageWidth;
private int imageHeight;
public CreatePixelsContinuous(WhiteboxRasterInfo wri, int startRow,
int endRow, int startCol, int endCol, int resFactor, double minValue,
double maxValue, double gamma, int[] palette, int backgroundColour) {
imageHeight = 0;
imageWidth = 0;
for (int row = startRow; row < endRow; row += resFactor) {
imageHeight++;
}
for (int col = startCol; col < endCol; col += resFactor) {
imageWidth++;
}
int numCells = imageHeight * imageWidth;
pixelData = new int[numCells];
data = new double[numCells];
mPaletteData = palette;
numPaletteEntriesLessOne = palette.length - 1;
mStartRow = startRow;
mStartCol = startCol;
mEndCol = endCol;
mEndRow = endRow;
mWB = wri;
noDataValue = mWB.getNoDataValue();
resolutionFactor = resFactor;
minVal = minValue;
maxVal = maxValue;
range = maxVal - minVal;
mGamma = gamma;
mBackgroundColour = backgroundColour;
}
public void createPixels() {
int i = 0;
for (int row = mStartRow; row < mEndRow; row += resolutionFactor) {
double[] rawData = mWB.getRowValues(row);
double value;
int entryNum;
int j;
for (int col = mStartCol; col < mEndCol; col += resolutionFactor) {
value = rawData[col]; //sourceData.getValue(row, col);
j = row * imageHeight + (col - mStartCol) / resolutionFactor;
if (value != noDataValue) {
entryNum = (int) (Math.pow(((value - minVal) / range), mGamma) * numPaletteEntriesLessOne);
if (entryNum < 0) {
entryNum = 0;
}
if (entryNum > numPaletteEntriesLessOne) {
entryNum = numPaletteEntriesLessOne;
}
pixelData[i] = mPaletteData[entryNum];
} else {
pixelData[i] = mBackgroundColour;
}
data[i] = value;
i++;
}
}
}
public int[] getPixels() {
return pixelData;
}
}