From aa90d4e4b2f3fd3c16fd6a08187f3973af812047 Mon Sep 17 00:00:00 2001 From: Remizov Kirirll Date: Tue, 4 Mar 2025 15:55:58 +0300 Subject: [PATCH] Added a filter Sepia --- .../org/example/lab_1/Helpers/Helpers.java | 12 ++++++ .../example/lab_1/ImageEditorController.java | 40 +++++++++++++++++++ .../org/example/lab_1/main-view.fxml | 1 + 3 files changed, 53 insertions(+) create mode 100644 lab_1/src/main/java/org/example/lab_1/Helpers/Helpers.java diff --git a/lab_1/src/main/java/org/example/lab_1/Helpers/Helpers.java b/lab_1/src/main/java/org/example/lab_1/Helpers/Helpers.java new file mode 100644 index 0000000..e9ee2e7 --- /dev/null +++ b/lab_1/src/main/java/org/example/lab_1/Helpers/Helpers.java @@ -0,0 +1,12 @@ +package org.example.lab_1.Helpers; + +public class Helpers { + public static int CheckBit(int val, int min, int max){ + if (val > max) { + return max; + } else if(val < min) { + return min; + } + return val; + } +} diff --git a/lab_1/src/main/java/org/example/lab_1/ImageEditorController.java b/lab_1/src/main/java/org/example/lab_1/ImageEditorController.java index a813f93..351b570 100644 --- a/lab_1/src/main/java/org/example/lab_1/ImageEditorController.java +++ b/lab_1/src/main/java/org/example/lab_1/ImageEditorController.java @@ -9,6 +9,7 @@ import javafx.scene.image.WritableImage; import javafx.scene.control.ProgressBar; import javafx.stage.FileChooser; import javafx.stage.Stage; +import static org.example.lab_1.Helpers.Helpers.CheckBit; public class ImageEditorController { @@ -112,5 +113,44 @@ public class ImageEditorController { progressBar.setVisible(false); } + public void Sepia() { + progressBar.setVisible(true); + Image img = imageView.getImage(); + if(img == null){ return; } + int w = (int) img.getWidth(); + int h = (int) img.getHeight(); + + WritableImage SepiaImg = new WritableImage(w, h); + + PixelReader Reader = img.getPixelReader(); + PixelWriter Writer = SepiaImg.getPixelWriter(); + + for(int y = 0; y < h; y++) { + for (int x = 0; x < w; x++) { + int argb = Reader.getArgb(x, y); + + int a = (argb >> 24) & 0xFF; + int r = (argb >> 16) & 0xFF; + int g = (argb >> 8) & 0xFF; + int b = argb & 0xFF; + + double grey = 0.299 * r + 0.587 * g + 0.144 * b; + + int k = 32; + double f; + r = CheckBit((int) grey+(2*k), 0, 255); + f = grey+(0.5*k); + g = CheckBit((int) f, 0, 255); + b = CheckBit((int) grey-(1*k), 0, 255); + + int newArgb = (a << 24) | (r << 16) | (g << 8) | b; + Writer.setArgb(x, y, newArgb); + } + } + + imageView.setImage(SepiaImg); + System.out.println("Применён Sepia"); + progressBar.setVisible(false); + } } diff --git a/lab_1/src/main/resources/org/example/lab_1/main-view.fxml b/lab_1/src/main/resources/org/example/lab_1/main-view.fxml index 3b16f93..3ec224f 100644 --- a/lab_1/src/main/resources/org/example/lab_1/main-view.fxml +++ b/lab_1/src/main/resources/org/example/lab_1/main-view.fxml @@ -18,6 +18,7 @@ +