# BufferedImage zeichnen



## Network (23. Jan 2011)

Hi,

ich möchte ein Spiel programmieren. Ich habe für den Hintergrund mehrere 30x30Pixel Hintergrundtiles erstellt.
Ich möchte nun auf diesen Tiles einen Hintergrund generieren, indem ich die einzelnen Bilder mehrmals nebeneinander und untereinander kopiere und in ein BufferedImage zeichne.

Aber irgendwie funtkioniert das nicht so wie geplant.

Hier mein Code:

```
public ImageIcon SetBackground( int w, int h )
	{
		try 
		{
			BufferedImage bfimg = new BufferedImage( w, h, BufferedImage.TYPE_INT_ARGB_PRE );
			BufferedImage bfbgtile;
			bfbgtile = ImageIO.read( new File( "Images/Terrain/Texturen/Vorlage_Erde_3.png" ) );
			Graphics2D g2d = (Graphics2D) bfbgtile.getGraphics();
			for( int i = 0; i < h; i+=30 )
			{
				for( int j = 0; j < w; j+=30 )
				{
					g2d.drawImage( bfimg, j, i, null );
				}
			}
			ImageIcon iibackground = new ImageIcon( bfimg );
			return iibackground;
		} 
		catch (IOException e) {e.printStackTrace(); return null;}
	}
```

Weiss jmd. was ich falsch mache?
Eine Exception wird nicht geworfen, aber wenn ich das zurückgegebene ImageIcon einem JLabel zuordne, passiert nichts. Das JLabel bleibt schwarz... (hab ich schwarz gemacht um zu kontrollieren ob das JLabel überhaupt auf dem JFrame liegt.)

Vielen Dank schonmal


----------



## SlaterB (23. Jan 2011)

Bildereinlesen dauert asynchron seine Zeit, MediaTracker ist ein Stichwort,
http://www.java-forum.org/awt-swing...bildern-jpanel-eigenem-objekt.html#post711415


oder versuche erstmal einfach nur mit normalen Graphics-Befehlen auf dem BufferedImage zu malen,
teste ob das kaputt ist


----------



## Network (23. Jan 2011)

Also ich hab jetzt mehrere Versuche gemacht:

1. bfbgtile sofort nach dem Laden auf ein JLabel mit "setIcon" zeichnen -> wird angezeigt (Also keine Frage der Dauer)
2. bfimg in dem selben Codeabschnitt mit "setIcon" zuordnen -> nichts
3. Die BufferedImage Eigenschaften umändern... Also Translucent, Type_Int_ARGB... etc. alles mal versucht... manchmal wird das JLabel schwarz angezeigt manchmal nicht. Aber keine Spur vom Bild 
4. Dem bfimg, das Bild bereits zuweisen, und das bfbgtile auf das bfimg in die Mitte zeichnen... -> Nichts, das bfimg ist immernoch das selbe...


----------



## SlaterB (23. Jan 2011)

soll 
g2d = (Graphics2D) bfbgtile.getGraphics();
nicht eher
g2d = (Graphics2D) bfimg.getGraphics();
heißen? 
wie gesagt: nicht groß mit unkontrollierbaren Bildern herumhantieren, sondern erstmal eine einfache Linie malen..


```
public class TestGUI extends JFrame {
	public TestGUI() throws Exception {
		BufferedImage bfimg = new BufferedImage(200, 200,
				BufferedImage.TYPE_INT_ARGB_PRE);
		BufferedImage bfbgtile;
//		bfbgtile = ImageIO.read(new File(
//				"Images/Terrain/Texturen/Vorlage_Erde_3.png"));
//		Graphics2D g2d = (Graphics2D) bfbgtile.getGraphics();
//		for (int i = 0; i < 5; i += 30) {
//			for (int j = 0; j < 5; j += 30) {
//				g2d.drawImage(bfimg, j, i, null);
//			}
//		}
		Graphics2D g2d = (Graphics2D) bfimg.getGraphics();
		g2d.setColor(Color.YELLOW);
		g2d.fillRect(0, 0, 1000, 1000);
		g2d.setColor(Color.GREEN);
		g2d.drawLine(4, 4, 20, 22);
		
		ImageIcon iibackground = new ImageIcon(bfimg);
		JLabel l = new JLabel(iibackground);
		l.setBorder(BorderFactory.createLineBorder(Color.BLUE));

		add(l);
		setSize(350, 300);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setVisible(true);
	}

	public static void main(String[] args)throws Exception {
		new TestGUI();
	}
}
```


----------



## Network (23. Jan 2011)

Tatsache... :autsch: 

Ich dachte g2d.drawImage(); zeichnet die g2d Daten in das in der Klammer angegebene Bild...

Funktioniert jetzt wunderbar.

vielen Dank


----------

