diff --git a/README.md b/README.md index b5e5848..d6f147c 100644 --- a/README.md +++ b/README.md @@ -10,6 +10,7 @@ In the configuration file `imagetagger.json` you can declare a directory for ima - `Left/Right` — previous/next image - `Enter` — creates/updates .txt file with tags + - `F3` — change background color ## Actual applying tag to image diff --git a/README_ru.md b/README_ru.md index de0d321..d04c818 100644 --- a/README_ru.md +++ b/README_ru.md @@ -8,8 +8,9 @@ В `cache` можно указать максимальное количество элементов для кэширования в памяти и разрешение, до которого будут уменьшаться фотографии, если они больше заданного. Рекомендую устанавливать здесь значения не больше разрешения монитора. Либо, если на весь экран не планируете разворачивать окно программы, то можно указать ещё меньше. **Управление** - - Влево/вправо — предыдущее/следующее изображение - - Enter — записать теги в текстовый файл + - `Влево/вправо` — предыдущее/следующее изображение + - `Enter` — записать теги в текстовый файл + - `F3` — изменить цвет фона **Фильтрация** Есть возможность фильтрации. Например, если в Мурманске живёт друг Петя, то для того, чтобы отметить фотографии с ним, можно задать фильтр: diff --git a/src/main/java/com/annimon/imagetagger/logic/KeyProcessor.java b/src/main/java/com/annimon/imagetagger/logic/KeyProcessor.java index 0f90650..340f3d8 100644 --- a/src/main/java/com/annimon/imagetagger/logic/KeyProcessor.java +++ b/src/main/java/com/annimon/imagetagger/logic/KeyProcessor.java @@ -3,6 +3,7 @@ package com.annimon.imagetagger.logic; import com.annimon.imagetagger.beans.TagButton; import com.annimon.imagetagger.views.ImagePanel; import com.annimon.imagetagger.views.TagPanel; +import java.awt.*; import java.awt.event.KeyEvent; import java.util.List; import java.util.Set; @@ -53,6 +54,9 @@ public class KeyProcessor { imageProcessor.mergeTags(tagPanel.getEnabledTags(), tagPanel.getDisabledTags()); imageProcessor.writeTagsToFile(); break; + case KeyEvent.VK_F3: + changeBackground(); + break; default: final var key = String.valueOf(e.getKeyChar()); if (keys.contains(key)) { @@ -60,4 +64,26 @@ public class KeyProcessor { } } } + + private void changeBackground() { + // It's not necessary to convert color to gray + // Just use one of it's color components + int r = imagePanel.getBackground().getRed(); + int gray = r; + final int[] colors = {0, 40, 64, 128, 192, 236, 255}; + for (int i = 0; i < colors.length; i++) { + if (r >= colors[i]) { + int index = i + 1; + if (index >= colors.length) { + index = 0; + } + gray = colors[index]; + } + } + final var bg = new Color(gray, gray, gray); + imagePanel.setBackground(bg); + imagePanel.repaint(); + tagPanel.setBackground(bg); + tagPanel.repaint(); + } } diff --git a/src/main/java/com/annimon/imagetagger/views/ImagePanel.java b/src/main/java/com/annimon/imagetagger/views/ImagePanel.java index 870ca40..67f0c03 100644 --- a/src/main/java/com/annimon/imagetagger/views/ImagePanel.java +++ b/src/main/java/com/annimon/imagetagger/views/ImagePanel.java @@ -18,6 +18,9 @@ public class ImagePanel extends Component { final var g2d = (Graphics2D) g; final int width = getWidth(); final int height = getHeight(); + g.setColor(getBackground()); + g.fillRect(0, 0, width, height); + final var resizableImage = imageProcessor.getImage(); if ((width <= 5) || (height <= 5) || (resizableImage == null)) { return;