0

我的提示如下:

编写一个程序,将几个图像文件的名称作为命令行参数,并在幻灯片放映(每两秒一个)中显示它们,使用淡入淡出效果到黑色和在图片之间淡入淡出。

我有使图像变淡的部分,但我遇到了一个问题,即把所有图像都保存在一个窗口下。例如,当我运行我的程序时,它会打开一个新窗口 - 将图片 A 淡化为黑色图片。用黑色图像打开一个新窗口,然后淡入图片 c。我试图让它从图片 A 开始,淡入黑色,然后在不打开新窗口的情况下淡入新图片。我知道这与我的 pic.show() 代码有关,但我不确定如何解决这个问题。

这是我的代码:

package fade;

import edu.princeton.cs.introcs.Picture;
import java.awt.Color;

public class Fade {

    public static Color blend(Color c, Color d, double alpha) {
        double r = (1 - alpha) * c.getRed() + alpha * d.getRed();
        double g = (1 - alpha) * c.getGreen() + alpha * d.getGreen();
        double b = (1 - alpha) * c.getBlue() + alpha * d.getBlue();
        return new Color((int) r, (int) g, (int) b);
    }

    public static void pause(int t) {
    try { Thread.sleep(t); }
    catch (InterruptedException e) { System.out.println("Error sleeping"); }
}


    public static void main(String[] args) {
        for (int k = 1; k < args.length; k++) {
            Picture source = new Picture(args[k]);
            Picture target = new Picture(args[0]);
            int M = 100;
            int width = source.width();
            int height = source.height();
            Picture pic = new Picture(width, height);
            for (int t = 0; t <= M; t++) {
                for (int i = 0; i < width; i++) {
                    for (int j = 0; j < height; j++) {
                        Color c0 = source.get(i, j);
                        Color cM = target.get(i, j);
                        Color c = blend(c0, cM, (double) t / M);
                        pic.set(i, j, c);
                    }
                }
                pic.show();
            }

        }

    }
}
4

1 回答 1

1

因为你只使用了几张图片。

  • 使用 JPanel 创建 Java Swing JFrame。扩展 JPanel,以便您可以覆盖 paintComponent 方法并绘制 java.awt.image.BufferedImage。

  • 使用 javax.imageio.ImageIO,将每张图片读入一个 BufferedImage。

  • 创建一个全黑的 BufferedImage。

  • 循环浏览 BufferedImages。

于 2013-02-16T23:30:18.507 回答