Java 圖片混合

 

package com.image

import java.awt.AlphaComposite;
import java.awt.BorderLayout;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.Toolkit;
import java.net.URL;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JSlider;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;

public class PictureMixFrame extends JFrame {
    private Image img1 = null; // 聲明圖像對象
    private Image img2 = null; // 聲明圖像對象
    private JSlider slider = null;
    private PictureMixPanel pictureMixPanel = null; // 聲明圖像面板對象
    public static void main(String args[]) {
        PictureMixFrame frame = new PictureMixFrame();
        frame.setVisible(true);
    }
    
    public PictureMixFrame() {
        super();
        URL imgUrl = PictureMixFrame.class.getResource("/img/img.jpg");// 獲取圖片資源的路徑
        img1 = Toolkit.getDefaultToolkit().getImage(imgUrl); // 獲取圖像資源
        imgUrl = PictureMixFrame.class.getResource("/img/imag.jpg");// 獲取圖片資源的路徑
        img2 = Toolkit.getDefaultToolkit().getImage(imgUrl); // 獲取圖像資源
        pictureMixPanel = new PictureMixPanel(); // 創建圖像面板對象
        this.setBounds(200, 160, 316, 237); // 設置窗體大小和位置
        this.add(pictureMixPanel); // 在窗體上添加圖像面板對象
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 設置窗體關閉模式
        this.setTitle("圖片溶合特效"); // 設置窗體標題

        slider = new JSlider();
        slider.addChangeListener(new ChangeListener() {
            public void stateChanged(final ChangeEvent e) {
                pictureMixPanel.repaint();// 重新調用面板類的paint()方法
            }
        });
        getContentPane().add(slider, BorderLayout.SOUTH);
    }
    
    // 創建面板類
    class PictureMixPanel extends JPanel {
        boolean flag = true;// 定義標記變量,用於控制x的值
        AlphaComposite alpha = AlphaComposite.SrcOver.derive(0.5f);// 獲得表示透明度的AlphaComposite對象
        public void paint(Graphics g) {
            Graphics2D g2 = (Graphics2D) g;// 獲得Graphics2D對象
            g2.drawImage(img1, 0, 0,  getWidth(), getHeight(), this);// 繪製圖像
            float value = slider.getValue();// 滑塊組件的取值
            float alphaValue = value / 100;// 計算透明度的值
            alpha = AlphaComposite.SrcOver.derive(alphaValue);// 獲得表示透明度的AlphaComposite對象
            g2.setComposite(alpha);// 指定AlphaComposite對象
            g.drawImage(img2, 0, 0, getWidth(), getHeight(), this);// 繪製調整透明度後的圖片
        }
        
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章