2013-08-08 2 views
0

Я вставив много изображений лица (face_50xx.png) в один большой холст (Faces.png) с использованием DrawImage(),ява DrawImage получается полный черный

но каждое лицо превращается в весь черный.

Вот мой исходный код:

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){ 

    } 
} 


} 

Пожалуйста, научи меня, что это проблема. Благодарю.

+2

С одной стороны, вы полностью игнорируя все исключения. Никогда не делай этого. По крайней мере, распечатайте трассировку стека с помощью 'e.printStackTrace()'. –

ответ

2
  • Вы абсолютно ничего не делаете с изображением, поэтому, когда вы пишете его в файл, оно будет пустым.
  • Возможно, вы рисуете неправильное изображение. Вы хотите получить объект Graphics, g, от выходного изображения и нарисовать изображения в обратном порядке.
  • Вы никогда не должны игнорировать исключения, как вы это делаете. По крайней мере, распечатать трассировку стека:

например,

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 

Edit: Вы заявляете в комментарии ,

Graphics g = in.getGraphics(); - это команда, переносящая изображение в g, не так ли?

Нет, у вас есть вещи назад. Подумайте о объекте Graphics, g, в качестве пера, который позволяет рисовать на изображении, из которого вы его получили. Таким образом, объект Graphics, g, из изображения in позволяет мне рисовать на изображении in.

+0

Графика g = in.getGraphics(); это команда, переносящая изображение в g, не так ли? – fiverules

+0

@fiverules: см. Править: –

+0

Решенная проблема. Made Graphics g = out.getGraphics(); вне цикла for, и нарисован в изображениях с правильным использованием g внутри для цикла. Спасибо за ваш совет! – fiverules

-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);