package beispiele; /* * Lecture: Computer Graphics * Project: Color Inversion * * Author: Marcus Stelke, Volker Schneider * Date: 04. April 2011 * * Version: 0.0.2 */ import java.awt.*; import java.awt.geom.AffineTransform; import java.awt.image.BufferedImage; import java.util.Date; import java.util.Timer; import java.util.TimerTask; public class Verzerren extends TimerTask { private BufferedImageDrawer buffImage; private Image myImage; private boolean check = false; private double newHeight; private int changeHeight; // um wieviel das Bild verzogen werden soll private int height, width; private Color[][][] pixelColor; public Verzerren(String img, BufferedImageDrawer bid, int height, int width, int delay) { this.setImage(img); this.height = height; this.width = width; this.changeHeight = height; buffImage = bid; //Das Buffered Image wird geladen, damit wir damit arbeiten können // // // Y-ACHSE IN REAL-KOORDINATEN TRANFORMIEREN // AffineTransform yUp = new AffineTransform(); // yUp.setToScale(1, -1); // AffineTransform translate = new AffineTransform(); // translate.setToTranslation(0, buffImage.bi.getHeight() * 2); // yUp.preConcatenate(translate); // buffImage.g2dbi.transform(yUp); buffImage.g2dbi.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); //Antialising buffImage.g2dbi.drawImage(myImage,0,height/2,null); //das Arbeitsbild das erste mal bemalen, damit wir die Farbwerte auslesen können System.out.println("Höhe: " + height/2 + "px"); System.out.println("Breite: " + width + "px"); System.out.println((width*height)+ " Pixel"); } public void run() { //Arbeitsbild neu malen buffImage.repaint(); float m = ((float) ((buffImage.bi.getHeight()*2) - buffImage.bi.getHeight()) / (buffImage.bi.getWidth() - 0)); int n = buffImage.bi.getHeight(); for (int y = buffImage.bi.getHeight()-1; y >= 0; y--){ for (int x = 0; x <= buffImage.bi.getWidth() - 1; x++) { Color orgColor = new Color(buffImage.bi.getRGB(x, y)); float uepsilon = (m * x + n); float hoehenMultiplikator = (float) (uepsilon / (buffImage.bi.getHeight())); if ((int) (hoehenMultiplikator * y) < (buffImage.bi.getHeight()*2) - 1) { // buffImage.bi.setRGB(x, ((int) ((y) * (hoehenMultiplikator))), orgColor.getRGB()); buffImage.bi.setRGB(x, ((int) ((buffImage.bi.getHeight() - 1 - y) * (hoehenMultiplikator))), orgColor.getRGB()); buffImage.bi.setRGB(x, ((int) ((buffImage.bi.getHeight() - 1 - y) * (hoehenMultiplikator))) + 1, orgColor.getRGB()); } this.update(); } // 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); } // double pDistance; // if(!check) { // for(int x=0; x