code: protected Double getBicubicInterpolationValue(Double[][] values,
  			float offsetX, float offsetY) {
  
  		Double value = null;
  
  		Double[] rowValues = new Double[4];
  
  		for (int y = 0; y < 4; y++) {
  			Double rowValue = getCubicInterpolationValue(values[y][0],
  					values[y][1], values[y][2], values[y][3], offsetX);
  			if (rowValue == null) {
  				rowValues = null;
  				break;
  			}
  			rowValues[y] = rowValue;
  		}
  
  		if (rowValues != null) {
  			value = getCubicInterpolationValue(rowValues, offsetY);
  		}
  
  		return value;
  	}
docs: Get the bicubic interpolation coverage data value from the 4 x 4 coverage
  data values
  
  @param values
  coverage data values
  @param offsetX
  x source pixel offset
  @param offsetY
  y source pixel offset
  @return bicubic coverage data value