close

1. 圓形頭像之程式範例

import java.awt.AlphaComposite;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.image.BufferedImage;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;

/**
 *
 * @author Elsa
 */
public class RoundImageIconObject {
    
    public static ImageIcon getRoundImageIcon(String url) {
        try {
            BufferedImage master = ImageIO.read(RoundImageIconObject.class.getResource(url));
            int diameter = Math.min(master.getWidth(), master.getHeight());
            BufferedImage mask = new BufferedImage(master.getWidth(), master.getHeight(), BufferedImage.TYPE_INT_ARGB);

            Graphics2D g2d = mask.createGraphics();
            applyQualityRenderingHints(g2d);
            g2d.fillOval(0, 0, diameter - 1, diameter - 1);
            g2d.dispose();

            BufferedImage masked = new BufferedImage(diameter, diameter, BufferedImage.TYPE_INT_ARGB);
            g2d = masked.createGraphics();
            applyQualityRenderingHints(g2d);
            int x = (diameter - master.getWidth()) / 2;
            int y = (diameter - master.getHeight()) / 2;
            g2d.drawImage(master, x, y, null);
            g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.DST_IN));
            g2d.drawImage(mask, 0, 0, null);
            g2d.dispose();
            
            return new ImageIcon(masked);
            
        } catch (Exception e){
            e.printStackTrace();
        }
        return null;
    }
    
    private static void applyQualityRenderingHints(Graphics2D g2d) {
        g2d.setRenderingHint(RenderingHints.KEY_ALPHA_INTERPOLATION, RenderingHints.VALUE_ALPHA_INTERPOLATION_QUALITY);
        g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
        g2d.setRenderingHint(RenderingHints.KEY_COLOR_RENDERING, RenderingHints.VALUE_COLOR_RENDER_QUALITY);
        g2d.setRenderingHint(RenderingHints.KEY_DITHERING, RenderingHints.VALUE_DITHER_ENABLE);
        g2d.setRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS, RenderingHints.VALUE_FRACTIONALMETRICS_ON);
        g2d.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
        g2d.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
        g2d.setRenderingHint(RenderingHints.KEY_STROKE_CONTROL, RenderingHints.VALUE_STROKE_PURE);
    }
}

 

2. 主執行之程式範例

import javax.swing.ImageIcon;

/**
 *
 * @author Elsa
 */
public class RoundImageIconDemo extends javax.swing.JFrame {

    /**
     * Creates new form RoundImageIconDemo
     */
    public RoundImageIconDemo() {
        initComponents();
        
        ImageIcon headIcon = RoundImageIconObject.getRoundImageIcon("/resource/user_icon.png");
        labHead.setIcon(headIcon);
    }

 

3. 執行前之樣版

執行前之樣版.png

 

4. 執行結果

 執行結果.png

 

參考網址:http://stackoverflow.com/questions/31423130/how-to-make-circle-image-label-in-java

 

 

 

arrow
arrow
    文章標籤
    Java ImageIcon 圓形頭像
    全站熱搜

    Elsa 發表在 痞客邦 留言(0) 人氣()