import imp.*;
import java.awt.Color;

public class Bildkombinationen
{
    public int begrenzen(int i) {
        if (i> 255) return 255;
        if (i< 0) return 0;
        return i;
    }

    public Picture addition(Picture bild1, Picture bild2) {
        int breite = Math.min(bild1.getWidth(), bild2.getWidth());
        int hoehe  = Math.min(bild1.getHeight(), bild2.getHeight());

        Color[][] pixelBild1 = bild1.getPixelArray();
        Color[][] pixelBild2 = bild2.getPixelArray();

        Color[][] pixelNeu   = new Color[breite][hoehe];

        for(int x=0; x < breite; x++) {
            for(int y=0; y < hoehe; y++) {
                int red   = begrenzen(pixelBild1[x][y].getRed() + pixelBild2[x][y].getRed());
                int green = begrenzen(pixelBild1[x][y].getGreen() + pixelBild2[x][y].getGreen());
                int blue  = begrenzen(pixelBild1[x][y].getBlue() + pixelBild2[x][y].getBlue());
                pixelNeu[x][y] = new Color(red, green, blue);
            }
        }
        Picture neuesBild = new Picture();
        neuesBild.setPixelArray(pixelNeu);
        return neuesBild;
    }

    public Picture differenz(Picture bild1, Picture bild2) {
        int breite = Math.min(bild1.getWidth(), bild2.getWidth());
        int hoehe  = Math.min(bild1.getHeight(), bild2.getHeight());

        Color[][] pixelBild1 = bild1.getPixelArray();
        Color[][] pixelBild2 = bild2.getPixelArray();

        Color[][] pixelNeu   = new Color[breite][hoehe];

        for(int x=0; x < breite; x++) {
            for(int y=0; y < hoehe; y++) {
                int red   = begrenzen(pixelBild1[x][y].getRed() - pixelBild2[x][y].getRed());
                int green = begrenzen(pixelBild1[x][y].getGreen() - pixelBild2[x][y].getGreen());
                int blue  = begrenzen(pixelBild1[x][y].getBlue() - pixelBild2[x][y].getBlue());
                pixelNeu[x][y] = new Color(red, green, blue);
            }
        }
        Picture neuesBild = new Picture();
        neuesBild.setPixelArray(pixelNeu);
        return neuesBild;
    }

    public Picture multiplikation(Picture bild1, Picture bild2) {
        int breite = Math.min(bild1.getWidth(), bild2.getWidth());
        int hoehe  = Math.min(bild1.getHeight(), bild2.getHeight());

        Color[][] pixelBild1 = bild1.getPixelArray();
        Color[][] pixelBild2 = bild2.getPixelArray();

        Color[][] pixelNeu   = new Color[breite][hoehe];

        for(int x=0; x < breite; x++) {
            for(int y=0; y < hoehe; y++) {
                int red   = begrenzen(pixelBild1[x][y].getRed() * pixelBild2[x][y].getRed() / 255);
                int green = begrenzen(pixelBild1[x][y].getGreen() * pixelBild2[x][y].getGreen() / 255);
                int blue  = begrenzen(pixelBild1[x][y].getBlue() * pixelBild2[x][y].getBlue() / 255);
                pixelNeu[x][y] = new Color(red, green, blue);
            }
        }
        Picture neuesBild = new Picture();
        neuesBild.setPixelArray(pixelNeu);
        return neuesBild;
    }    
}
