Java 图片混合

版权声明:文章版权归作者所有,请不要随意转载抄袭,情节严重,追究法律责任!! https://blog.csdn.net/Ibelievesunshine/article/details/84839356

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);// 绘制调整透明度后的图片
        }
        
    }
}

猜你喜欢

转载自blog.csdn.net/Ibelievesunshine/article/details/84839356
今日推荐