0

drawImage() を使用して、大量の顔画像 (face_50xx.png) を 1 つの大きなキャンバス (Faces.png) に貼り付けています。

しかし、すべての顔が真っ黒になります。

ここに私のソースコードがあります:

import java.io.*;
import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.awt.Color;


public class maa{

static BufferedImage in;
static BufferedImage out;

public static void main(String[] args) {
    String A = "face_";
    String B = "png";
    int j = 0;

    try{
        in = ImageIO.read(new File(A + 5001 + "." + B));
    }
    catch(java.io.IOException e){
    }




    out = new BufferedImage(1920, 14592, in.getType());


    for(int i = 1; i < 760; i++){
        String num;
        j = i + 5000;
        num = Integer.toString(j);
        try{
            in = ImageIO.read(new File("face_" + num + "." + "png"));
            Graphics g = in.getGraphics();
            g.drawImage(out, (i%10)*192, (i/10)*192, null);

        }
        catch(java.io.IOException e){
            continue;
        }
    }
    try{
        ImageIO.write(out,"png",new File("Faces." + B));
    }
    catch(java.io.IOException e){

    }
}


}

何が問題なのか教えてください。ありがとう。

4

2 に答える 2

2
  • 出力イメージに対して何もしていないため、ファイルに書き込むと空白になります。
  • 間違ったイメージで描いているようです。out 画像から Graphics オブジェクト g を取得し、in 画像を out に描画します。
  • あなたがやっているように例外を無視してはいけません。少なくともスタック トレースを出力します。

例えば、

catch(IOException e) {
  e.printStackTrace();
}

プログラムの基本構造は次のようになります。

create out image
get Out's Graphics object, g
for Loop through all of the `in` images
  Draw each in image onto out using out's Graphics context, g
end for loop
dispose of g
Write the out image to file

編集: あなたはコメントで述べています、

Graphics g = in.getGraphics();は in 画像を g に転送するコマンドですね。

いいえ、物事が逆になっています。Graphics オブジェクト g を、取得元の画像に描画できるペンと考えてください。したがって、画像からの Graphics オブジェクト g をin使用すると、画像に描画できますin

于 2013-08-08T13:13:38.380 に答える
-2

交換:

Graphics g = in.getGraphics();
            g.drawImage(out, (i%10)*192, (i/10)*192, null);

に:in.getGraphics().drawImage(out, (i%10)*192, (i/10)*192, null);

于 2014-05-07T13:23:02.207 に答える