# JPanel in Bufferedimage



## javaPanther (8. Jun 2010)

Hallo liebe Leute,
ich arbeite gerade im Rahmen eines privaten Spielchens an einem sich zufällig erstelltendem Terrain welches auf Basis von Perlin Noise geschieht. Wenn alles erfolgreich durch ist wird das Ganze auf einem JPanel ausgegeben. Nun habe ich davon "versucht" ein Bufferedimage aufzunehmen, die Farbwerte der Pixel ausgelesen und in ein Array zur weiteren Verarbeitung gespeichert.
Wie man sich denken kann funktioniert das nicht ganz, da ich ein Array komplett mit 0len bestückt herausbekomme. Auf dem JPanel wird das Bild wie ich es habe angezeigt, dan wird das Abbild genommen, woraufhin aus diesem Abbild die Pixel entnommen werden sollen. wenn ich das aufgenommene Bild ausgebe zeigt sich das dieses schwarz ist. Was habe ich falsch gemacht!?


```
{
	paint();
		
	for(int i=0; i<img.getHeight(); i++){
		for(int j=0; j<img.getHeight(); j++){
			int[] array = img.getData().getPixel(i, j, (int[]) null);
			System.out.print(" "+array[1]);
		}
		System.out.println();
	}
}

public void paint(){
		Graphics2D g2d = (Graphics2D) this.getContentPane().getGraphics();

		RenderingHints hint = new RenderingHints( RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON );
		g2d.setRenderingHints( hint );
		perlinPaint = new PerlinPaint( java.awt.Color.white,java.awt.Color.black, g2d.getTransform().getScaleInstance(.025,.025));
		g2d.setPaint( perlinPaint );
		g2d.fillRect(0,0,200,200);
		
		img = new BufferedImage(this.getContentPane().getSize().width,this.getContentPane().getSize().height,BufferedImage.TYPE_INT_RGB);
	}
```

Dankbar für Jede Hilfe, Gruß und raus.


----------



## Michael... (8. Jun 2010)

zunächst mal sollte man auf Swingkomponenten nicht getGraphics() aufrufen und hoffen was brauchbares zu bekommen ;-)

Ich habe in der richtig schon lange nichts mehr gemacht, aber es sollte nicht notwendig sein, die Farbwerte der Pixels auszulesen. Man geht da eher so vor (ohne Gewähr):
- BufferedImage erzeugen
- per createGraphics() bekommt man ein Graphics Objekt mit dem man auf das Image zeichnen kann
- dieses Graphics Objekt gibt man einfach an das Panel, damit es sich darauf zeichnen kann
So in etwa:

```
BufferImage image = new ....
JPanel panel = new ...
...
panel.paint(image.createGraphics);
```


----------



## javaPanther (8. Jun 2010)

Dankeschön,
habe es jetzt wie folgt geändert:

```
public void paint(){
		img = new BufferedImage(200, 200, 1);
		Graphics2D g = img.createGraphics();
		
		RenderingHints hint = new RenderingHints( RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON );
		g.setRenderingHints( hint );
		perlinPaint = new PerlinPaint( java.awt.Color.white,java.awt.Color.black, g.getTransform().getScaleInstance(.025,.025));
		g.setPaint( perlinPaint );
		g.fillRect(0,0,200,200);
	}
```


----------



## Ebenius (9. Jun 2010)

Deine paint()-Methode sollte das erzeugte Graphics-Objekt am Ende auch wieder zerstören: [c]g.dispose()[/c].

Ist das Thema schon erledigt? http://www.java-forum.org/forum-faq-beitraege/86306-thema-erledigt-markieren.html

Ebenius


----------

