我的提示如下:
编写一个程序,将多个图像文件的名称作为命令行参数显示,并在幻灯片放映中显示它们(每两秒钟一次),使用淡化效果为黑色,图像之间为黑色淡出。
我有淡化图像的部分但是我遇到了将所有图像保存在一个窗口下的问题。例如,当我运行我的程序时,它将打开一个新窗口 - 将图片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();
}
}
}
}
答案 0 :(得分:1)
因为你只使用了一些图像。
使用JPanel创建Java Swing JFrame。扩展JPanel,以便覆盖paintComponent方法并绘制java.awt.image.BufferedImage。
使用javax.imageio.ImageIO,将每张图片读入BufferedImage。
创建一个全黑的BufferedImage。
循环使用BufferedImages。