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

public class Bitebenen
{
    public Picture schwarzweiss(Picture originalbild, int grenze) {
        int breite = originalbild.getWidth();
        int hoehe  = originalbild.getHeight();

        Color[][] pixel = originalbild.getPixelArray();
        Color[][] pixelNeu = new Color[breite][hoehe];

        for(int x=0; x < breite; x++) {
            for(int y=0;y < hoehe; y++) {
                int grau = (pixel[x][y].getRed()*299+pixel[x][y].getGreen()*587+pixel[x][y].getBlue()*114)/1000;
                if(grau < grenze) {
                    pixelNeu[x][y] = Color.black;
                } else {
                    pixelNeu[x][y] = Color.white;
                } 
            }
        }
        Picture neuesBild = new Picture();
        neuesBild.setPixelArray(pixelNeu);
        return neuesBild;
    }

    public Picture bitEbene(Picture originalbild, int ebene) {
        int breite = originalbild.getWidth();
        int hoehe  = originalbild.getHeight();

        Color[][] pixel = originalbild.getPixelArray();
        Color[][] pixelNeu = new Color[breite][hoehe];

        for(int x=0; x < breite; x++) {
            for(int y=0;y < hoehe; y++) {
                int rot = pixel[x][y].getRed() & (1 << (ebene-1));
                int gruen = pixel[x][y].getGreen() & (1 << (ebene-1));
                int blau = pixel[x][y].getBlue() & (1 << (ebene-1));
                pixelNeu[x][y] = new Color(rot, gruen, blau);
            } 
        }

        Picture neuesBild = new Picture();
        neuesBild.setPixelArray(pixelNeu);
        return neuesBild;
    } 

    public  Picture steganographie_verstecken(Picture originalbild, String text) {
        Picture textbild = new Picture(originalbild.getWidth(), originalbild.getHeight(), "000000");
        textbild.text(text, 10, 20);
        Picture original0 = bitEbene(originalbild, 1);
        Picture text0 = bitEbene(textbild,1);
        Bildkombinationen alg = new Bildkombinationen();
        Picture neuesBild = alg.differenz(originalbild, original0);
        neuesBild = alg.addition(neuesBild, text0);
        return neuesBild;
    }    

    public Picture steganographie_ermitteln(Picture originalbild) {
        Picture neuesBild = bitEbene(originalbild, 1);
        neuesBild = schwarzweiss(neuesBild, 1);
        return neuesBild;
    } 
}
