Rechteck eines Graphics eines JPanels in einem anderen JPanel anzeigen

IDontKnow

Mitglied
Letztendlich bin ich dabei eine Lupe für Java zu schreiben. Da ich hierzu nichts gefunden habe, habe ich begonnen eine eigene zu bauen.

Ich habe also beispielsweise ein Bild auf ein JPanel gemalt.
Jetzt will ich mit der Maus an eine bestimmte Stelle gehen und der Bildausschnitt der 50 pixel in alle Richtungen entfernt ist in einem extra JPanel anzeigen.

Entschuldigung für die kurze Beschreibung und meinen derzeit fehlenden Codevorschlag. Aber ehrlich gesagt weiß ich nicht wie ich daran kommen soll. Hab bis jetzt nur die Variante gefunden über:

new Robot().createScreenCapture(...)

zu gehen. Aber letztentlich sollte das doch irgendwie schöner gehen?


Falls dies schon irgendwo behandelt wurde bin ich auch über einen Link dankbar, da ich selber leider nichts gefunden habe.

Herzlichen Dank im Voraus!
 
Ich denke du musst erst das ganze Image vergrößern

Java:
BufferedImage resizedImage = new BufferedImage(IMG_WIDTH, IMG_HEIGHT, type);
Graphics2D g = resizedImage.createGraphics();
g.drawImage(originalImage, 0, 0, IMG_WIDTH, IMG_HEIGHT, null);
g.dispose();

Dann kannst du aus dem vergrößertem Image ein Rechteck "ausschneiden"

Java:
BufferedImage zoomImage = resizedImage.getSubimage(int x, int y, int w, int h);
 
Wenn man tatsächlich ein Image zur Verfügung hat, braucht man da nicht ein neues, skaliertes Image zu erstellen, und dort dann was rauszuschneiden (es wäre auch gelinde gesagt "ungeschickt", wenn man ein 1000x1000-Bild auf 5000x5000 hochrechnet, um sich da dann einen 500x500-Ausschnitt rauszuholen - von den Problemen mit getSubImage mal abgesehen ( http://www.java-forum.org/spiele-multimedia-programmierung/120318-performance-bufferedimages.html ))

In diesem Fall kann man einfach den gewünschten Ausschnitt direkt vergrößert zeichnen. Mit Graphics (Java Platform SE 6) sollte man das hinkreigen, vielleicht tut's auch eine von denen mit weniger Paramtern, je nachdem, was genau gebraucht wird.
 
Danke euch beiden. Hab es wie folgt gelöst (dabei ist parent das andere Panel)...

Java:
...
BufferedImage offImg = new BufferedImage(parent.getWidth(), parent.getHeight(), BufferedImage.TYPE_INT_RGB);

...


		parent.paint(offImg.createGraphics());
			BufferedImage resultImage = offImg
					.getSubimage(x, y, this.getWidth() / zoomFaktor,
							this.getHeight() / zoomFaktor);

			graphics.drawImage(resultImage.getScaledInstance(
					resultImage.getWidth() * zoomFaktor,
					resultImage.getHeight() * zoomFaktor, Image.SCALE_SMOOTH),
					0, 0, rectWidth, rectHeight, this);
...
 
Mit der verlinkten Methode einen Ausschnitt aus dem "offImage" zu zeichnen hat nicht geklappt?
Habe gerade keine Lust, ein KSKB zu basteln. Das verstehst du bestimmt.
 
Ah mein Fehler. Danke dir!
Hatte nicht bemerkt, dass dein link auf eine bestimmte Methode von Graphics zeigt.

Mit dieser hat es auch wunderbar funktioniert!
 

Zurück
Oben