0

私のプロンプトは次のとおりです。

いくつかの画像ファイルの名前をコマンド ライン引数として受け取り、それらをスライド ショー (2 秒ごとに 1 つずつ) で表示するプログラムを作成し、画像間の黒へのフェード効果と黒からのフェード効果を使用します。

画像がフェードする部分がありますが、すべての画像を 1 つのウィンドウの下に保持するという問題があります。たとえば、プログラムを実行すると、新しいウィンドウが開きます-画像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 を 1 つ作成します。

  • BufferedImages を循環します。

于 2013-02-16T23:30:18.507 に答える