Java examples for 2D Graphics:Color Alpha
Return alphas shaded color.
/*/*from w ww .j ava 2s . c o m*/ * Copyright (c) 2007-2011 by The Broad Institute of MIT and Harvard. All Rights Reserved. * * This software is licensed under the terms of the GNU Lesser General Public License (LGPL), * Version 2.1 which is available at http://www.opensource.org/licenses/lgpl-2.1.php. * * THE SOFTWARE IS PROVIDED "AS IS." THE BROAD AND MIT MAKE NO REPRESENTATIONS OR * WARRANTES OF ANY KIND CONCERNING THE SOFTWARE, EXPRESS OR IMPLIED, INCLUDING, * WITHOUT LIMITATION, WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR * PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT OR OTHER DEFECTS, WHETHER * OR NOT DISCOVERABLE. IN NO EVENT SHALL THE BROAD OR MIT, OR THEIR RESPECTIVE * TRUSTEES, DIRECTORS, OFFICERS, EMPLOYEES, AND AFFILIATES BE LIABLE FOR ANY DAMAGES * OF ANY KIND, INCLUDING, WITHOUT LIMITATION, INCIDENTAL OR CONSEQUENTIAL DAMAGES, * ECONOMIC DAMAGES OR INJURY TO PROPERTY AND LOST PROFITS, REGARDLESS OF WHETHER * THE BROAD OR MIT SHALL BE ADVISED, SHALL HAVE OTHER REASON TO KNOW, OR IN FACT * SHALL KNOW OF THE POSSIBILITY OF THE FOREGOING. */ import org.apache.log4j.Logger; import java.awt.*; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.util.*; public class Main{ public static Map<Object, Color> colorCache = new WeakHashMap<Object, Color>( 100); public static Map<Color, float[]> componentsCache = Collections .synchronizedMap(new HashMap<Color, float[]>()); /** * Return alphas shaded color. This method is used, rather than the Color constructor, so that * the alpha is not lost in postscript output. * * @param alpha * @return */ public static Color getCompositeColor(Color backgroundColor, Color foregroundColor, float alpha) { float[] dest = getRGBColorComponents(backgroundColor); float[] source = getRGBColorComponents(foregroundColor); int r = (int) ((alpha * source[0] + (1 - alpha) * dest[0]) * 255 + 0.5); int g = (int) ((alpha * source[1] + (1 - alpha) * dest[1]) * 255 + 0.5); int b = (int) ((alpha * source[2] + (1 - alpha) * dest[2]) * 255 + 0.5); int a = 255; int value = ((a & 0xFF) << 24) | ((r & 0xFF) << 16) | ((g & 0xFF) << 8) | ((b & 0xFF) << 0); Color c = colorCache.get(value); if (c == null) { c = new Color(value); colorCache.put(value, c); } return c; } /** * Return alphas shaded color for a white background. This method is used, rather than the Color constructor, so that * the alpha is not lost in postscript output. * * @param source * @param alpha * @return */ public static Color getCompositeColor(Color source, float alpha) { return getCompositeColor(Color.white, source, alpha); } public static float[] getRGBColorComponents(Color color) { float[] comps = componentsCache.get(color); if (comps == null) { comps = color.getRGBColorComponents(null); componentsCache.put(color, comps); } return comps; } }