From f867e40ca8804612759f8c79185586cb9ec91410 Mon Sep 17 00:00:00 2001 From: JFronny <33260128+jfronny@users.noreply.github.com> Date: Wed, 7 Jul 2021 09:50:18 +0200 Subject: [PATCH] more using stuff --- src/main/java/io/gitlab/jfronny/ImgJava/Main.java | 7 +++++-- .../ImgJava/imageProcessing/UtilColor.java | 15 +++++++++++---- .../io/gitlab/jfronny/ImgJava/util/MColor.java | 2 +- .../io/gitlab/jfronny/ImgJava/util/Picture.java | 5 +++++ 4 files changed, 22 insertions(+), 7 deletions(-) diff --git a/src/main/java/io/gitlab/jfronny/ImgJava/Main.java b/src/main/java/io/gitlab/jfronny/ImgJava/Main.java index df297d1..c6f0909 100644 --- a/src/main/java/io/gitlab/jfronny/ImgJava/Main.java +++ b/src/main/java/io/gitlab/jfronny/ImgJava/Main.java @@ -26,7 +26,7 @@ public class Main { pict = stackViewer.push(UtilGeometric.rotate(pict, UtilGeometric.RotateMode.Left)); pict = stackViewer.push(UtilGeometric.rotate(pict, UtilGeometric.RotateMode.Right)); pict = stackViewer.push(UtilGeometric.mirror(pict, UtilGeometric.MirrorMode.Vertical)); - //pict = stackViewer.push(ImageUtil.blurBox(pict, 10)); + stackViewer.push(UtilMatrix.blurBox(new Picture(pict), 10)); pict = stackViewer.push(UtilMatrix.blurGauss(pict, 3, 2)); pict = stackViewer.push(UtilMatrix.sharpen(pict, 3)); pict = stackViewer.push(UtilColor.invert(pict)); @@ -34,7 +34,10 @@ public class Main { pict = stackViewer.push(UtilColor.tint(pict, new Color(255, 0, 0, 128))); pict = stackViewer.push(UtilColor.tint(pict, new Color(0, 255, 0, 0))); pict = stackViewer.push(UtilColor.tint(pict, new Color(0, 0, 255, 255))); - pict = stackViewer.push(UtilColor.grayscale(pict)); + stackViewer.push(UtilColor.grayscale(new Picture(pict), UtilColor.GrayscaleMode.Avg)); + stackViewer.push(UtilColor.grayscale(new Picture(pict), UtilColor.GrayscaleMode.Min)); + stackViewer.push(UtilColor.grayscale(new Picture(pict), UtilColor.GrayscaleMode.Max)); + pict = stackViewer.push(UtilColor.grayscale(pict, UtilColor.GrayscaleMode.Natural)); pict.save(run.resolve("moscov.png")); stackViewer.repaint(); } catch (IOException e) { diff --git a/src/main/java/io/gitlab/jfronny/ImgJava/imageProcessing/UtilColor.java b/src/main/java/io/gitlab/jfronny/ImgJava/imageProcessing/UtilColor.java index e53e4f9..a90a713 100644 --- a/src/main/java/io/gitlab/jfronny/ImgJava/imageProcessing/UtilColor.java +++ b/src/main/java/io/gitlab/jfronny/ImgJava/imageProcessing/UtilColor.java @@ -3,10 +3,13 @@ package io.gitlab.jfronny.ImgJava.imageProcessing; import io.gitlab.jfronny.ImgJava.util.MColor; import io.gitlab.jfronny.ImgJava.util.Picture; -import javax.swing.plaf.metal.MetalIconFactory; import java.awt.*; public class UtilColor { + public enum GrayscaleMode { + Avg, Min, Max, Natural + } + public static Picture tint(Picture picture, Color tint) { int w = picture.getWidth(); int h = picture.getHeight(); @@ -93,7 +96,7 @@ public class UtilColor { return picture; } - public static Picture grayscale(Picture picture) { + public static Picture grayscale(Picture picture, GrayscaleMode mode) { int w = picture.getWidth(); int h = picture.getHeight(); @@ -103,8 +106,12 @@ public class UtilColor { for (int x = 0; x < w; x++) { for (int y = 0; y < h; y++) { Color c = pixel[x][y]; - int n = c.getRed() + c.getGreen() + c.getBlue(); - n /= 3; + int n = MColor.clamp(switch (mode) { + case Avg -> (c.getRed() + c.getGreen() + c.getBlue()) / 3d; + case Max -> Math.max(Math.max(c.getRed(), c.getBlue()), c.getGreen()); + case Min -> Math.min(Math.min(c.getRed(), c.getBlue()), c.getGreen()); + case Natural -> c.getRed() * 0.299d + c.getGreen() * 0.587d + c.getBlue() * 0.114d; + }); pixelNeu[x][y] = new Color(n, n, n, c.getAlpha()); } } diff --git a/src/main/java/io/gitlab/jfronny/ImgJava/util/MColor.java b/src/main/java/io/gitlab/jfronny/ImgJava/util/MColor.java index e89b8d9..c390d0d 100644 --- a/src/main/java/io/gitlab/jfronny/ImgJava/util/MColor.java +++ b/src/main/java/io/gitlab/jfronny/ImgJava/util/MColor.java @@ -27,7 +27,7 @@ public class MColor { return new Color(clamp(r), clamp(g), clamp(b), clamp(a)); } - private static int clamp(double d) { + public static int clamp(double d) { return (int)Math.round(Math.max(Math.min(d, 255), 0)); } diff --git a/src/main/java/io/gitlab/jfronny/ImgJava/util/Picture.java b/src/main/java/io/gitlab/jfronny/ImgJava/util/Picture.java index d925298..2dbc1d0 100644 --- a/src/main/java/io/gitlab/jfronny/ImgJava/util/Picture.java +++ b/src/main/java/io/gitlab/jfronny/ImgJava/util/Picture.java @@ -74,6 +74,11 @@ public class Picture { public Picture(int width, int height) { this(width, height, "D0D0D0"); } + + public Picture(Picture pict) { + this(pict.getWidth(), pict.getHeight()); + setPixelArray(pict.getPixelArray()); + } /** * Erzeugt ein Bild aus einer Datei