From 97aee006a196efc803cf6c656611112d87bd1ab7 Mon Sep 17 00:00:00 2001 From: nathan Date: Tue, 11 Jul 2017 02:03:53 +0200 Subject: [PATCH] Code polish. Added getting a buffered image from an icon --- src/dorkbox/util/ImageUtil.java | 44 +++++++++++++++++++++++++-------- 1 file changed, 34 insertions(+), 10 deletions(-) diff --git a/src/dorkbox/util/ImageUtil.java b/src/dorkbox/util/ImageUtil.java index 925b2ba..98dda19 100644 --- a/src/dorkbox/util/ImageUtil.java +++ b/src/dorkbox/util/ImageUtil.java @@ -15,6 +15,7 @@ */ package dorkbox.util; +import java.awt.AlphaComposite; import java.awt.Color; import java.awt.Dimension; import java.awt.Graphics2D; @@ -31,6 +32,7 @@ import java.util.Iterator; import javax.imageio.ImageIO; import javax.imageio.ImageReader; import javax.imageio.stream.ImageInputStream; +import javax.swing.Icon; import javax.swing.ImageIcon; @SuppressWarnings("WeakerAccess") @@ -195,11 +197,12 @@ class ImageUtil { BufferedImage bimage = new BufferedImage(size, size, BufferedImage.TYPE_INT_ARGB); - Graphics2D bGr = bimage.createGraphics(); - bGr.addRenderingHints(new RenderingHints(RenderingHints.KEY_RENDERING, - RenderingHints.VALUE_RENDER_QUALITY)); - bGr.drawImage(image, paddingX, paddingY, null); - bGr.dispose(); + Graphics2D g = bimage.createGraphics(); + g.addRenderingHints(new RenderingHints(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY)); + g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER)); + + g.drawImage(image, paddingX, paddingY, null); + g.dispose(); // Return the buffered image return bimage; @@ -216,16 +219,37 @@ class ImageUtil { BufferedImage bimage = new BufferedImage(image.getWidth(null), image.getHeight(null), BufferedImage.TYPE_INT_ARGB); - Graphics2D bGr = bimage.createGraphics(); - bGr.addRenderingHints(new RenderingHints(RenderingHints.KEY_RENDERING, - RenderingHints.VALUE_RENDER_QUALITY)); - bGr.drawImage(image, 0, 0, null); - bGr.dispose(); + Graphics2D g = bimage.createGraphics(); + g.addRenderingHints(new RenderingHints(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY)); + g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER)); + + g.drawImage(image, 0, 0, null); + g.dispose(); // Return the buffered image return bimage; } + /** + * @return the icon, unmodified, as a Buffered Image + */ + public static + BufferedImage getBufferedImage(Icon icon) { + if (icon instanceof BufferedImage) { + return (BufferedImage) icon; + } + + BufferedImage bimage = new BufferedImage(icon.getIconWidth(), icon.getIconHeight(), BufferedImage.TYPE_INT_ARGB); + + Graphics2D g = bimage.createGraphics(); + g.addRenderingHints(new RenderingHints(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY)); + g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER)); + + icon.paintIcon(null, g, 0, 0); + g.dispose(); + + return bimage; + } /** * Reads the image size information from the specified file, without loading the entire file.