rendered paste bodypackage 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<width; x++) {// // if(x==width-1) {check = true;}// newHeight = (((double)x/(double)width)*(double)(height/2))+(double)(height/2);// pDistance = newHeight/myImage.getHeight(null);// // for(int y=height/2; y<height; y++) {// // // Farbwerte des aktuellen Pixel auslesen// int currentPixelInt = buffImage.bi.getRGB(x, y);// Color currentPixel = new Color(currentPixelInt);// // // Rot, Grün und Blau bestimmen// int red = currentPixel.getRed();// int green = currentPixel.getGreen();// int blue = currentPixel.getBlue();// // Color newPixel = new Color(red, green, blue);// buffImage.bi.setRGB(x, (int)((height-newHeight)*pDistance), newPixel.getRGB());// this.update();// }// }// } } /** * Setzt das das Anzeigebild * @param img * @return */ public boolean setImage(String img) { this.myImage = new javax.swing.ImageIcon(img).getImage(); return true; } /** * Ersetzt das Anzeigebild mit dem im Buffer gespeicherten Bild */ private void update() { this.myImage = Toolkit.getDefaultToolkit().createImage(this.buffImage.bi.getSource()); } public static void main(String[] argv) { int delay = 10; String imgpath = "bild.jpg"; //Pfad zum Bild Image myImage = new javax.swing.ImageIcon(imgpath).getImage(); //temporäres Bild um Maße auszulesen int height = myImage.getHeight(null)*2; int width = myImage.getWidth(null); BufferedImage bi = new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB); //Hier wird das Buffered Image erstellt BufferedImageDrawer bid = new BufferedImageDrawer(bi,width,height); //Der Buffered Drawer Verzerren img = new Verzerren(imgpath, bid, height, width, delay); //Der eigentlich Programmaufruf // Timer für den Refresh Timer t = new Timer(); t.scheduleAtFixedRate(img,0,delay); }}