1 つの画像は 6 つの画像より優れている、画像フィルター - Java

画面に表示されるすべての画像は、色付きのピクセルで構成されていることを以前に学びました。

しかし今、あなたがアニメの絵を与えられたとして、あなたが望む効果を得るにはどうすればよいでしょうか?

カラー画像をグレーアウトし、画像にモザイクを追加し、画像の融合を実現しますか?

通り過ぎるなら見逃さないでください、これらすべてが実現できます。

では、試してみましょう。

1. ウィンドウ クラスを作成し、フィルター ボタンを追加します。

2. 新しい Filter クラスを作成して、フィルタ メソッドを記述します。

ステップ 1: 画像の情報 (つまり、それらのピクセルの色) を取得するメソッドを記述します。

     public int[][] getpix(String path) {
        File file = new File(path);
        try {
            BufferedImage buf = ImageIO.read(file);
            int w = buf.getWidth();
            int h = buf.getHeight();
            int[][] imagearr = new int[w][h];
            for (int i = 0; i < w; i++) {
                for (int j = 0; j < h; j++) {
                    imagearr[i][j] = buf.getRGB(i, j);
                }
            }
            return imagearr;
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }

A: まず、情報を取得した後、それを保存する必要があることを理解する必要があります。2 次元配列よりも適しているものは何ですか?

したがって、2 次元配列を返すメソッドを作成します。これは、後の代入操作に便利です。

内部パラメーター (パス) は、後で使用するためのイメージ パスを参照します。

B: その後、必要な画像を取得し、情報を抽出します。

File クラスを使用して画像を取得します。次に、BufferedImage クラスを使用してキャッシュ イメージを作成し、イメージの情報を取得します。

目的は、BufferedImage メソッドを使用して、幅、高さ、および RGB 値を取得することです。

最後に、2 次元配列を使用して情報を保存します。

ステップ 2: RGB 値の分割方法を記述します。(前にも言いましたが、行って調べて、いくつかの見解を教えてください!!!)

ステップ 3: グレー化方法を記述します。

 public void begray(Graphics g) {
        int pix;
        int[][] img = getpix("C:\\Users\\27259\\Desktop\\jieyi.png");
        for (int i = 0; i < img.length; i++) {
            for (int j = 0; j < img[i].length; j++) {
                pix = img[i][j];
                divide(pix);
                gray = (int) (0.4 * red + 0.25 * green + 0.35 * blue);
                Color cl = new Color(gray, gray, gray);
                g.setColor(cl);
                g.fillRect(300 + i, 300 + j, 1, 1);
            }
        }
    }//灰化

A: 2 次元配列を作成し、getpix(path) を使用して画像情報を取得します。

B: 配列をトラバースし、色を付けて、幅と高さが 1 の塗りつぶされた四角形を描画します。(grey = (int) (0.4 * red + 0.25 * green + 0.35 * blue) 式に注意してください。先人が苦労して得たものです。使用しない理由はありますか?)

 

ステップ 4: モザイク化メソッドを記述します。

 for (int i = 0; i < img.length; i += 5) {
            for (int j = 0; j < img[i].length; j += 5) {
                pix = img[i][j];
                Color cl=new Color(pix);
                g.setColor(cl);
                g.fillRect(300 + i , 300 + j , 5, 5);
            }
        }
 

A:灰化とほぼ同じです。

B:数点間隔でしか色をとらない。

C: 幅と高さが間隔であるベタの長方形を描きます。

 ステップ 5: 画像融合メソッドを記述します。

A: グレー化法とほぼ同じですが、2 つの画像を抽出します。

        int[][] img1 = getpix("C:\\Users\\27259\\Desktop\\jieyi.jpg");
        int[][] img2 = getpix("C:\\Users\\27259\\Desktop\\xuezhixia.png");

B: 2 つの画像の幅と高さの違いに注意し、境界を越えないように小さな値をとります。

C: ピクセル サイズを判断し、その絵の色を使用することを決定します。

3. ActionListenerを実装するクラス(AC)を作成し、actionPerformedメソッドでFiterクラスのfilterメソッドを呼び出します。

4. 終わりました。仕事に行きましょう。

 

おすすめ

転載: blog.csdn.net/AkinanCZ/article/details/125222987