package io.gitlab.jfronny.ImgJava.imageProcessing; import io.gitlab.jfronny.ImgJava.util.Picture; import java.awt.Color; public class UtilGeometric { public enum MirrorMode { Vertical, Horizontal } public enum RotateMode { Left, Right } /** * Horizontally mirrors an image (mutates original instance) * * @param picture Picture to mirror * @return The mirrored image */ public static Picture mirror(Picture picture, MirrorMode mirrorMode) { int w = picture.getWidth(); int h = picture.getHeight(); Color[][] pixel = picture.getPixelArray(); Color[][] pixelNeu = new Color[w][h]; for (int x = 0; x < w; x++) { for (int y = 0; y < h; y++) { pixelNeu[x][y] = switch (mirrorMode) { case Vertical -> pixel[x][h - y - 1]; case Horizontal -> pixel[w - x - 1][y]; }; } } picture.setPixelArray(pixelNeu); return picture; } /** * Rotates an image by 90° (mutates original instance) * * @param picture Picture to mirror * @return The mirrored image */ public static Picture rotate(Picture picture, RotateMode rotateMode) { int w = picture.getWidth(); int h = picture.getHeight(); Color[][] pixel = picture.getPixelArray(); Color[][] pixelNeu = new Color[h][w]; for (int x = 0; x < w; x++) { for (int y = 0; y < h; y++) { pixelNeu[y][x] = switch (rotateMode) { case Left -> pixel[w - x - 1][y]; case Right -> pixel[x][h - y - 1]; }; } } picture.setPixelArray(pixelNeu); return picture; } }