private BufferedImage getDarkenedSourceImage(BufferedImage sourceImage, float startAlpha, float endAlpha, boolean leftToRight, Color blendColor) {
    	if (startAlpha > ZERO_PERCENT_THRESHOLD || endAlpha > ZERO_PERCENT_THRESHOLD) {
    		final BufferedImage blendSource = new BufferedImage(1, sourceImage.getHeight(), BufferedImage.TYPE_INT_ARGB);
    		final BufferedImage modifiedSourceImage = new BufferedImage(sourceImage.getWidth(), sourceImage.getHeight(), BufferedImage.TYPE_INT_ARGB);
    		
    		final Graphics2D blendSourceGraphics = blendSource.createGraphics();
    		blendSourceGraphics.setColor(blendColor);
    		blendSourceGraphics.fillRect(0, 0, 1, sourceImage.getHeight());
    		blendSourceGraphics.dispose();
    
    		final Graphics2D graphics = modifiedSourceImage.createGraphics();
    		graphics.drawImage(sourceImage, 0, 0, null);
    		
    		final float delta = (endAlpha - startAlpha) / sourceImage.getWidth();
    		
    		if (leftToRight) {
    			for(int i = 0; i < sourceImage.getWidth(); i++) {
    				final float alpha = startAlpha + (delta * i);
    				graphics.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, alpha));
    				graphics.drawImage(blendSource, i, 0, null);
    			}
    		} else {
    			for(int i = sourceImage.getWidth() - 1; i >= 0; i--) {
    				final float alpha = startAlpha + (delta * ((sourceImage.getWidth() - 1) - i));
    				graphics.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, alpha));
    				graphics.drawImage(blendSource, i, 0, null);    				
    			}
    		}    		    		    		
    		graphics.dispose();
    		
    		for(int x = 0; x < sourceImage.getWidth(); x++) {
    			for(int y = 0; y < sourceImage.getHeight(); y++) {
    				int sourceAlphaValue = (sourceImage.getRGB(x, y) & 0xFF000000);
    				int targetPixelColor = (modifiedSourceImage.getRGB(x, y) & 0x00FFFFFF);
    				modifiedSourceImage.setRGB(x, y, (targetPixelColor | sourceAlphaValue));
    			}
    		}
    		
    		return modifiedSourceImage;
    	} else {
    		return sourceImage;
    	}
    }