All pastes #2047662 Raw Edit

ultracooler anti abstuerzcode

public java v1 · immutable
#2047662 ·published 2011-04-18 08:09 UTC
rendered paste body
public void update(Graphics g) {		g2d = (Graphics2D) g;		// Y-ACHSE IN REAL-KOORDINATEN TRANFORMIEREN		AffineTransform yUp = new AffineTransform();		yUp.setToScale(1, -1);		AffineTransform translate = new AffineTransform();		translate.setToTranslation(0, bi.getHeight() * 2);		yUp.preConcatenate(translate);		// Umwandlung der Y-Achse auf g2d anwenden.		g2d.transform(yUp);				// Erzeugt ein neues BufferedImage biUp, auf welches gezeichnet werden		// kann.		// Es bekommt die doppelte Höhe vom BufferedImage bi, da dieses auf die		// doppelte Höhe gestreckt werden soll.		// Die Breite wird übernommen vom BufferedImage bi, da diese nicht		// geändert		// werden soll.		BufferedImage biUp = new BufferedImage(bi.getWidth(), 2 * bi.getHeight(), BufferedImage.TYPE_INT_RGB);								// Variablen für die Berechnung der Geraden, entlang welcher das Bild		// gestreckt wird.		//		// m: STEIGUNG DER GERADEN: (Y2-Y1 / X2-X1) (Punkte: P1: (Anfang der		// Geraden unten links) P2: (Ende der Geraden oben rechts) )		float m = ((float) (biUp.getHeight() - bi.getHeight()) / (bi.getWidth() - 0));		// n: STARTHÖHE DER GERADEN		int n = bi.getHeight();						// SCHLEIFE ZUM BERECHNEN DES GESTRECKTEN BILDES		// 		// Zählt nur bis Pixel Width-1 und Height-1, da getRGB sonst einen		// Fehler ausgibt.		// Bsp.: Bild mit Auflösung 512x384 wird nur bis 511x383 ausgelesen.		//		// ANM.: Tauscht man Y und X in den FOR-Schleifen (inkl. Height + Width)		// wird das Bild entweder von		// links nach rechts ODER von unten nach oben gezeichnet		// Y wird runtergezählt bis zum obersten Pixel (runter, da in Java die		// Y-Achse von oben nach unten geht)		for (int y = bi.getHeight()-1; y >= 0; y--){				// Y wird hochgezählt bis zum obersten Pixel//		for (int y = 0; y <= bi.getHeight() - 1; y++) {			// X wird hochgezählt bis zum rechtesten Pixel//			for (int x = bi.getWidth()-1; x >= 0; x--){			for (int x = 0; x <= bi.getWidth() - 1; x++) {				// Auslesen des RGB-Wert aus dem aktuellen Pixel des				// Original-Bildes				Color orgColor = new Color(bi.getRGB(x, y));				// GERADENGLEICHUNG ZUR BERECHNUNG DER HÖHE BIS ZU DER				// GEZEICHNET WERDEN SOLL				// uepsilon ist die Hoehe, bis zu der das gestreckte Bild				// gezeichnet wird.				float uepsilon = (m * x + n);				// GIBT AN, WIE OFT DIE PIXEL MULTIPLIZIERT WERDEN				// z.B. rechteste Linie: hoehenMultiplikator = 2, da Bildgrösse				// verdoppelt wird.				float hoehenMultiplikator = (float) (uepsilon / (bi.getHeight()));				// Überprüft, ob mit hoehenMultiplikator multiplizierter Y-Wert				// im Bild liegt				//				// Grund:				// Da bei der Berechnung der Höhe eine Fließkommazahl auf eine				// ganze Zahl gecastet wird, kann es passieren, dass der Wert				// über die Höhe des Bildes hinausgeht!				// Höhe-1, da Pixel y+1 sonst übers Bild hinausgeht.				if ((int) (hoehenMultiplikator * y) < biUp.getHeight() - 1) {					// Zeichnen der aktuell gestreckten Pixel-Reihe in biUp					// hoehenMultiplikator gibt den Grad der Streckung an.					// Damit, keine Lücken beim Zeichnen entstehen, wird der					// jeweilige Pixel 1 nach oben kopiert.					//					// Anm.: Bild wird verkehrt herum gezeichnet, durch das spätere					// 		 Umdrehen der Y-Achse wird das aber wieder behoben.					biUp.setRGB(x, ((int) ((bi.getHeight() - 1 - y) * (hoehenMultiplikator))), 		orgColor.getRGB());					biUp.setRGB(x, ((int) ((bi.getHeight() - 1 - y) * (hoehenMultiplikator))) + 1, 	orgColor.getRGB());				}				// Zeichnet das Bild Pixel für Pixel				// g2d.drawImage(biUp, 0, bi.getHeight(), null);				// g2d.drawImage(biUp, 0, 0, null);				g2d.drawImage(biUp, 8, -30, null);			}						// Zeichnet das Bild Linie für Linie nach jedem Schleifen-Durchlauf//			g2d.drawImage(biUp, 0, 0, null);			// g2d.drawImage(biUp, 0, bi.getHeight(), null);//			g2d.drawImage(biUp, 8, -30, null);					} // endFOR		// Zeichnet das fertig gestreckte Bild komplett.		// (x=8, y=-30 , damit das Bild nicht über den Rand gezeichnet wird.//		 g2d.drawImage(biUp, 8, -30, null);		// g2d.drawImage(biUp, 0, bi.getHeight(), null);	} // end of update()