# Refactoring



## Naraizoun (14. Jan 2012)

Hey....

wir haben in oop eine aufgabe bekommen die ich nicht richtig verstehe.. :

•    Führen sie ein Refactoring der Anwendung durch, um so anschließend einfacher weitere 
Filter einzubauen. (Verwenden Sie das Sprachkonstrukt Interface)
•    Laden Sie die neuen Filter über den Klassennamen (Reflection) und erweitern sie das Menü 
zum Aufruf des neuen Filters automatisch.
•    Diskutieren sie den Umgang mit den Exceptions. Zeigen Sie anhand ihrer Implementierung 
den Umgang in Java mit Exceptions, indem Sie mindestens je eine Exception werfen, fangen 
oder propagieren.

hier ist der wichtige quelltext mit den filtern:


```
import java.awt.*;
import java.awt.image.*;
import java.lang.Math;
import java.math.MathContext;
import java.util.ArrayList;

import javax.swing.*;

/**
 * Farbbild ist eine Klasse, die Farbbilder mit einer bequemen
 * Schnittstelle definiert.
 * 
 * @author  Michael Kölling und David J. Barnes
 * @version 1.1
 */
public class Farbbild extends BufferedImage implements Refactor, Bildref 
{
    /**
     * Erzeuge ein Farbbild als Kopie von einem BufferedImage.
     * @param image das zu kopierende BufferedImage.
     */
    public Farbbild(BufferedImage image)
    {
         super(image.getColorModel(), image.copyData(null), 
               image.isAlphaPremultiplied(), null);
    }
    
    
    

    /**
     * Erzeuge ein Farbbild mit der angegebenen Größe mit
     * undefiniertem Inhalt.
     * @param breite die Breite des Bildes.
     * @param hoehe die Hoehe des Bildes.
     */
    public Farbbild(int breite, int hoehe)
    {
        super(breite, hoehe, TYPE_INT_RGB);
    }

    /**
     * Setze den angegebenen Bildpunkt dieses Bildes auf die
     * angegebene Farbe.
     * @param x die x-Koordinate des Bildpunktes.
     * @param y die y-Koordinate des Bildpunktes.
     * @param col die Farbe des Bildpunktes.
     */
    public void setzePunktfarbe(int x, int y, Color col)
    {
        int punktfarbe = col.getRGB();
        setRGB(x, y, punktfarbe);
    }
    
    /**
     * Liefere die Farbe des angegebenen Bildpunktes.
     * @param x die x-Koordinate des Bildpunktes.
     * @param y die y-Koordinate des Bildpunktes.
     * @return die Farbe des Bildpunktes an der angegebenen Position.
     */
    public Color gibPunktfarbe(int x, int y)
    {
        int punktfarbe = getRGB(x, y);
        return new Color(punktfarbe);
    }

    /* (non-Javadoc)
	 * @see Bildref#abdunkeln()
	 */
    @Override
	public void abdunkeln()
    {
        int hoehe = getHeight();
        int breite = getWidth();
        
        // Auf alle Bildpunkte die Operation "darker" der
        // Klasse Color anwenden.
        for(int y = 0; y < hoehe; y++) {
            for(int x = 0; x < breite; x++) {
                setzePunktfarbe(x, y, gibPunktfarbe(x, y).darker());
            }
        }
    }

    /* (non-Javadoc)
	 * @see Bildref#aufhellen()
	 */
    @Override
	public void aufhellen()
    {
        int hoehe = getHeight();
        int breite = getWidth();

        // Auf alle Bildpunkte die Operation "brighter" der
        // Klasse Color anwenden.
        for(int y = 0; y < hoehe; y++) {
            for(int x = 0; x < breite; x++) {
                setzePunktfarbe(x, y, gibPunktfarbe(x, y).brighter());
            }
        }
    }
    
    /* (non-Javadoc)
	 * @see Bildref#schwellwerteAnwenden()
	 */
    @Override
	public void schwellwerteAnwenden()
    {
        int hoehe = getHeight();
        int breite = getWidth();
        for(int y = 0; y < hoehe; y++) {
            for(int x = 0; x < breite; x++) {
                Color farbe = gibPunktfarbe(x, y);
                int helligkeit = (farbe.getRed() + farbe.getBlue() + farbe.getGreen()) / 3;
                if(helligkeit <= 85) {
                    setzePunktfarbe(x, y, Color.BLACK);
                }
                else if(helligkeit <= 170) {
                    setzePunktfarbe(x, y, Color.GRAY);
                }
                else {
                    setzePunktfarbe(x, y, Color.WHITE);
                }
            }
        }
    }
    
    
    
    /* (non-Javadoc)
	 * @see Bildref#vspiegelung()
	 */
    @Override
	public void vspiegelung()
    {
        int hoehe = getHeight();
        int breite = getWidth();
        for(int y = 0; y < hoehe; y++) {
            for(int x = 0; x < breite/2; x++) {
                Color links = gibPunktfarbe(x, y);
                setzePunktfarbe(x, y, gibPunktfarbe(breite-1-x, y));
                setzePunktfarbe(breite-1-x, y, links);
            }
        }
    }
    
    /* (non-Javadoc)
	 * @see Bildref#hspiegelung()
	 */
    @Override
	public void hspiegelung()
    {
        int hoehe = getHeight();
        int breite = getWidth();
        for(int x = 0; x < breite; x++) {
            for(int y = 0; y < hoehe/2; y++) {
                Color oben = gibPunktfarbe(x, y);
                setzePunktfarbe(x, y, gibPunktfarbe(x,hoehe-1-y));
                setzePunktfarbe(x,hoehe-1- y, oben);
            }
        }
    }
    
    /* (non-Javadoc)
	 * @see Bildref#invertieren(java.awt.image.BufferedImage)
	 */
    @Override
	public BufferedImage invertieren(BufferedImage bearbeiten)
    {
        int hoehe = getHeight();
        int breite = getWidth();
        for (int x = 0; x < breite; x++) {
    		for (int y = 0; y < hoehe; y++) {
    			int neu = 255 + 256*255 + 256*256*255 - getRGB(x, y);
    			
    			bearbeiten.setRGB(x, y, neu);
    			
    			
    		}
    	}
    	return bearbeiten;
    
    }
    
    
   /* (non-Javadoc)
 * @see Bildref#weichzeichnen()
 */
@Override
public void weichzeichnen()
   {
	   
	   int hoehe = getHeight();
	   int breite = getWidth();
	   
	   Farbbild kopie = new Farbbild(this);
	   
	   for(int y = 0; y < hoehe; y++){
		   for(int x = 0; x <breite; x++){
			   setzePunktfarbe(x, y, kopie.gibWeichzeichnerWert(x, y));
			   
		   }
	   }
   }
   
   public Color gibWeichzeichnerWert(int x, int y)
   {
	   int hoehe = getHeight();
	   int breite = getWidth();
	   int zaehler = 0;
	   int rot = 0;
	   int gruen = 0;
	   int blau = 0;
	   
	   for(int a = y-1; a<= y+1; a++){
		   for(int b = x-1; b <= x+1; b++){
			   if(a>=0 && a<hoehe && b>=0 &&b< breite)
				   
			   {
				   Color farbe = gibPunktfarbe(b, a);
				   rot += farbe.getRed();
				   gruen += farbe.getGreen();
				   blau += farbe.getBlue();
				   
				   zaehler++;
				   
			   }
		   }
	   }
	   
	   rot /= zaehler;
	   blau /= zaehler;
	   gruen/= zaehler;
	   
	   return new Color(rot, gruen, blau);
			   }
}
```
 Wenn sich jemand bereit erklärt mir zu helfen, sollte er es ausführlich angehen sonst versteh ich nicht all zu viel hab ich die befürchtung...


----------



## maki (14. Jan 2012)

Hast du auch eine konkrete Frage zu deiner Hausaufgabe?

*veschoben*


----------



## Naraizoun (14. Jan 2012)

Hey Maki,

hab die ersten beiden aufgaben glaube ich hinbekommen ( vllt kann ich ja dir den code schicken und du schaust drüber)... nur sitz ich nun an der 3. aufgabe ---> wie mach ich das mit den exceptions ?? :bahnhof:


----------

