code: protected Double getBilinearInterpolationValue(GriddedTile griddedTile,
  			TImage image, Double[][] leftLastColumns, Double[][] topLeftRows,
  			Double[][] topRows, int y, int x, float widthRatio,
  			float heightRatio, float destTop, float destLeft, float srcTop,
  			float srcLeft) {
  
  		// Determine which source pixel to use
  		float xSource = getXSource(x, destLeft, srcLeft, widthRatio);
  		float ySource = getYSource(y, destTop, srcTop, heightRatio);
  
  		CoverageDataSourcePixel sourcePixelX = getXSourceMinAndMax(xSource);
  		CoverageDataSourcePixel sourcePixelY = getYSourceMinAndMax(ySource);
  
  		Double[][] values = new Double[2][2];
  		populateValues(griddedTile, image, leftLastColumns, topLeftRows,
  				topRows, sourcePixelX, sourcePixelY, values);
  
  		Double value = null;
  
  		if (values != null) {
  			value = getBilinearInterpolationValue(sourcePixelX, sourcePixelY,
  					values);
  		}
  
  		return value;
  	}
docs: Get the bilinear interpolation coverage data value
  
  @param griddedTile
  gridded tile
  @param image
  image
  @param leftLastColumns
  last columns in the tile to the left
  @param topLeftRows
  last rows of the tile to the top left
  @param topRows
  last rows of the tile to the top
  @param y
  y coordinate
  @param x
  x coordinate
  @param widthRatio
  width source over destination ratio
  @param heightRatio
  height source over destination ratio
  @param destTop
  destination top most pixel
  @param destLeft
  destination left most pixel
  @param srcTop
  source top most pixel
  @param srcLeft
  source left most pixel
  @return bilinear coverage data value