Lekce 21 (3. března 2022)

Vnořené třídy

public class Vnejsi {
    private static class Vnitrni {
        /* ... */
    }

    public static void main(String[] args) {
        Vnitrni a = new Vnitrni();
    }
}

Rozhraní (interface)

public class UpravaBarev {
    private static interface Prevod {
        public awh.Color preved(awh.Color vstup);
    }

    private static class Sediva implements Prevod {
        public awh.Color preved(awh.Color vstup) {
            int sediva = (int)(
                0.299 * vstup.getRed()
                + 0.587 * vstup.getGreen()
                + 0.114 * vstup.getBlue()
            );
            return awh.Color.fromRgb(sediva, sediva, sediva);
        }
    }

    private static class Zesvetleni implements Prevod {
        private final double pomer;

        public Zesvetleni(double pomer) {
            this.pomer = pomer;
        }

        private int slozka(int a) {
            long nova = Math.round(pomer * a);
            if (nova < 0) {
                return 0;
            } else if (nova > 255) {
                return 255;
            } else {
                return (int) nova;
            }
        }

        public awh.Color preved(awh.Color vstup) {
            return awh.Color.fromRgb(
                slozka(vstup.getRed()),
                slozka(vstup.getGreen()),
                slozka(vstup.getBlue())
            );
        }
    }

    private static void prevedVsechnyPixely(awh.Image obr, Prevod prevod) {
        int sirka = obr.getWidth();
        int vyska = obr.getHeight();

        for (int y = 0; y < vyska; y++) {
            for (int x = 0; x < sirka; x++) {
                awh.Color puvodni = obr.getPixel(x, y);
                awh.Color nova = prevod.preved(puvodni);
                obr.setPixel(x, y, nova);
            }
        }
    }

    public static void main(String[] args) {
        String typ = args[0];
        Prevod prevod;
        if (typ.equals("sediva")) {
            prevod = new Sediva();
        } else if (typ.equals("svetlo")) {
            prevod = new Zesvetleni(2.0);
        } else if (typ.equals("tma")) {
            prevod = new Zesvetleni(0.5);
        } else {
            awh.Sys.die("Neznamy prevod.");
            return;
        }

        awh.Image obr = awh.Image.loadFromFile(args[1]);
        prevedVsechnyPixely(obr, prevod);
        obr.saveToFile(args[2]);
    }
}
Licence Creative Commons
Alej.alisma.cz, jejímž autorem je Vojtěch Horký, podléhá licenci
Creative Commons Uveďte autora-Zachovejte licenci 4.0 International.