added inversion filter

This commit is contained in:
Remizov Kirirll 2025-03-04 12:04:50 +03:00
parent 4177c0dc08
commit b508c42deb

View File

@ -3,6 +3,9 @@ package org.example.lab_1;
import javafx.fxml.FXML; import javafx.fxml.FXML;
import javafx.scene.image.Image; import javafx.scene.image.Image;
import javafx.scene.image.ImageView; import javafx.scene.image.ImageView;
import javafx.scene.image.PixelReader;
import javafx.scene.image.PixelWriter;
import javafx.scene.image.WritableImage;
import javafx.scene.control.ProgressBar; import javafx.scene.control.ProgressBar;
import javafx.stage.FileChooser; import javafx.stage.FileChooser;
import javafx.stage.Stage; import javafx.stage.Stage;
@ -16,7 +19,7 @@ public class ImageEditorController {
private ProgressBar progressBar; private ProgressBar progressBar;
public void initialize() { public void initialize() {
// Устанавливаем изображение по умолчанию из URL progressBar.setVisible(false);
String imageUrl = "https://s0.rbk.ru/v6_top_pics/media/img/7/15/756775857541157.jpg"; String imageUrl = "https://s0.rbk.ru/v6_top_pics/media/img/7/15/756775857541157.jpg";
Image defaultImage = new Image(imageUrl); Image defaultImage = new Image(imageUrl);
imageView.setImage(defaultImage); imageView.setImage(defaultImage);
@ -32,14 +35,43 @@ public class ImageEditorController {
if (selectedFile != null) { if (selectedFile != null) {
Image image = new Image(selectedFile.toURI().toString()); Image image = new Image(selectedFile.toURI().toString());
imageView.setImage(image); imageView.setImage(image);
} else {
Image stImage = new Image("");
} }
} }
public void applyInversionFilter() { public void applyInversionFilter() {
// Здесь будет логика для применения фильтра инверсии progressBar.setVisible(true);
// Пока просто выводим сообщение Image image = imageView.getImage();
if (image == null) return;
int width = (int) image.getWidth();
int height = (int) image.getHeight();
WritableImage invertedImage = new WritableImage(width, height);
PixelReader pixelReader = image.getPixelReader();
PixelWriter pixelWriter = invertedImage.getPixelWriter();
for (int y = 0; y < height; y++) {
for (int x = 0; x < width; x++) {
int argb = pixelReader.getArgb(x, y);
int a = (argb >> 24) & 0xFF;
int r = (argb >> 16) & 0xFF;
int g = (argb >> 8) & 0xFF;
int b = argb & 0xFF;
// Invert colors
r = 255 - r;
g = 255 - g;
b = 255 - b;
// Reassemble ARGB
int invertedArgb = (a << 24) | (r << 16) | (g << 8) | b;
pixelWriter.setArgb(x, y, invertedArgb);
}
}
imageView.setImage(invertedImage);
System.out.println("Применен фильтр инверсии"); System.out.println("Применен фильтр инверсии");
progressBar.setVisible(false);
} }
} }