Archief - [PROG][JAVA] Van JPanel naar image schrijven

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

Recipe4hate

Legacy Member
Hallo

Is het mogelijk om een stuk van je JPanel weg te schrijven in een BufferedImage?
Ik zou graag een afbeelding inladen, deze over een andere afbeelding plakken en het geheel exporteren als jpeg.
Het inladen lukt, en dan wordt deze gewoon als ImageIcon getekend op mijn JPanel. Hoe dat je deze area als capture kan gebruiken is me onbekend.

Daggie

Legacy Member
Code:
		JLabel l = new JLabel("Bla?");
		JPanel p = new JPanel(new GridLayout(1, 1));
		p.add(l);

		JFrame f = new JFrame("Bla");
		f.getContentPane().add(p);
		f.pack();

		BufferedImage image = new BufferedImage(p.getWidth(), p.getHeight(),
				BufferedImage.TYPE_INT_RGB);
		Graphics2D g = image.createGraphics();
		p.paint(g);
		g.dispose();
		try {
			ImageIO.write(image, "jpeg", new File("C://test.jpeg"));
		} catch (IOException e) {
			e.printStackTrace();
		}

Recipe4hate

Legacy Member
Zou je zo vriendelijk willen zijn om enkele regels uit te leggen?

f.pack(); - wat doet deze methode?
p.paint(g); - Wat wordt hier precies gepaint?
e.printStackTrack(); Wat doet deze methode?

Bedankt!

Bavo aka Joske

Legacy Member
De truc die hij eengeeft is een BufferedImage te maken, de grafische context daarvan te nemen, daarop te tekenen, en dan met ImageIO dat weg te schrijven.

Lijkt mij een uitstekende tip die je op weg zet. De rest zoek je gewoon uit in de API's.

Google: java bufferedimage, java graphics2D, java ImageIO

killgore

Legacy Member
Recipe4hate zei:
Zou je zo vriendelijk willen zijn om enkele regels uit te leggen?

f.pack(); - wat doet deze methode?
p.paint(g); - Wat wordt hier precies gepaint?
e.printStackTrack(); Wat doet deze methode?

Bedankt!

preffered size berekenen
panel tekenen naar een bepaald graphics object
de call-stack printen.

2 minuten googlewerk.

Recipe4hate

Legacy Member
De bufferedImage gebruiken en hierin een panel painten werkt uitstekend. Enorm bedankt!

killgore- je hebt misschien gelijk dat het op google te vinden is, maar als ik in iemands code meelees, dan is het handiger dat deze persoon mij de regels ook kan uitleggen, snapje. Online voorbeelden kunnen misschien anders worden geïnterpreteerd.
Ik heb Daggies code ook niet overgetypt, maar sommige regels als basisidee verder uitgewerkt.

Jullie zijn allemaal bedankt! Deze mag dicht dus ;)
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan