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); } // 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); }