code: public int interpolateARGB(final double xNormalized, final double yNormalized){
  		double xF = xNormalized * (getWidth()-1);
  		double yF = yNormalized * (getHeight()-1);
  		int x = (int)xF;
  		int y = (int)yF;
  		int c00 = getValue(x, 							y);
  		int c01 = getValue(x, 						   (y+1 < getHeight() ? y+1:y));
  		int c10 = getValue((x+1 < getWidth() ? x+1:x), 	y);
  		int c11 = getValue((x+1 < getWidth() ? x+1:x), (y+1 < getHeight() ? y+1:y));
  		return interpolateColors(c00, c01, c10, c11, xF-x, yF-y);
  	}
docs: Returns a bilinearly interpolated ARGB value of the image for the
  specified normalized position (x and y within [0,1]). Position {0,0}
  denotes the image's origin (top left corner), position {1,1} denotes the
  opposite corner (pixel at {width-1, height-1}).
  <p>
  An ArrayIndexOutOfBoundsException may be thrown for x and y greater than 1
  or less than 0.
  @param xNormalized coordinate within [0,1]
  @param yNormalized coordinate within [0,1]
  @throws ArrayIndexOutOfBoundsException when a resulting index is out of
  the data array's bounds, which can only happen for x and y values less
  than 0 or greater than 1.
  @return bilinearly interpolated ARGB value.
  @since 1.0