画面に表示されるすべての画像は、色付きのピクセルで構成されていることを以前に学びました。
しかし今、あなたがアニメの絵を与えられたとして、あなたが望む効果を得るにはどうすればよいでしょうか?
カラー画像をグレーアウトし、画像にモザイクを追加し、画像の融合を実現しますか?
通り過ぎるなら見逃さないでください、これらすべてが実現できます。
では、試してみましょう。
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. 終わりました。仕事に行きましょう。