JAVA实现电子相册

/**
 * @date 2022/3/27 - 22:54
 */

import javax.imageio.ImageIO;
import javax.swing.*;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;

/**
 * 电子相册
 * 需求:制作电子相册,图片进行淡入,进行切换
 * 思路:
 *   1.先有框架
 *   2.有面板来承接图片
 *   3.有进行切换的图片组
 *   4.获取到图片之后显示到面板中
 *   5.根据改变图片的透明度实现淡入的效果
 *
 * */
public class EImage extends JPanel{
    //用来显示画的图片
     BufferedImage bgImage;

    public static void main(String[] args) {
        //先创建框架
        JFrame imageJrame = new JFrame();
        //设置框架大小
        imageJrame.setSize(300,600);
        //设置框架标题
        imageJrame.setTitle("电子相册");
        //设置框架居中显示
        imageJrame.setLocationRelativeTo(null);
        imageJrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        //创建面板,用来承接图片,将面板添加到框架中
        EImage image = new EImage();
        imageJrame.add(image);
        //初始化图片
        image.initImage();

        //显示到面板中
        image.begin();
        //进行显示框架
        imageJrame.setVisible(true);
    }

    int num = 0;
    Float ff = 0.0f;
    //另外开启一个线程来改变ff的值,透明度
    private void begin() {
        new Thread(new Runnable() {
            @Override
            public void run() {
            // 切换效果
                while(true){
                    bgImage=images[num];
                    num++;
                    if(num == 4){
                        num = 0;
                    }
                     //淡出效果
                    while(true){
                        if(ff!=100){
                            ff=ff+20;
                            repaint();
                        }else{
                            ff =0.0f;
                            break;
                        }
                        try {
                            Thread.sleep(300);
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                    }
                }

            }
        }).start();
    }
    
    //将图片画到面板中
    @Override
    public void paint(Graphics g) {
        super.paint(g);
        if(bgImage!=null){
            Graphics2D graphics2D = (Graphics2D) g;
            //设置图片透明度:淡出效果
            graphics2D.setComposite(AlphaComposite.SrcOver.derive(ff/100f));
            graphics2D.drawImage(bgImage,0,0,bgImage.getWidth(),bgImage.getHeight(),null);
        }
    }

    BufferedImage[] images = new BufferedImage[5];
    //获取图片。并将图片存入到数组中
    private  void initImage() {
        //获取5张图片。读取
        for (int i = 1; i <=5 ; i++) {
            try {
            BufferedImage myImage = ImageIO.read(new File("src/images/bg"+i+".png"));
            images[i-1]=myImage;
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        //设置画板图片
        bgImage = images[0];
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值