Как преобразовать изображение в форму в Java? - PullRequest
0 голосов
/ 14 января 2020

В настоящее время я работаю над программой фондового рынка, которая учит студентов, как взаимодействовать с фондовым рынком. Проблема, над которой я сейчас работаю, вращается вокруг проблемы эффективности и памяти. Я делаю все свои 2D значки (например, значок настроек, значки портфолио и т. Д. c) в Adobe Illustrator, я экспортирую эти файлы в виде файлов PNG и добавляю их в свою программу. В настоящее время я использую JavaFX, и одной из особенностей JavaFX является то, что называется imageView, - это метод, который обрабатывает открытие и просмотр изображений.

Итак, допустим, что пользователь хотел бы нажать на значок Настройки в игре, я бы хотел изменить значок настроек на более темный или более светлый цвет, когда пользователь наводит курсор на него. В настоящее время я использую два разных изображения, удаляю одно из кадра и заменяю его другим, что крайне неэффективно.

Я знаю, что в JavaFX есть класс Shape, который наследует многие методы, такие как Fill или setFill , но эти методы могут влиять только на те из Shape class.

Мой вопрос: «Как я могу преобразовать изображение, импортированное в проект, в то, что я могу использовать такие методы, как setFill и Fill on»

1 Ответ

2 голосов
/ 14 января 2020

Если вы стремитесь только к базовым c изменениям, таким как затемнение или освещение ваших значков, вы можете посмотреть на часть Effects javaFx, вы можете прочитать об этом здесь , или же вы можете импортируйте ваши изображения в формате SVG, как предложено в комментариях

Если вы планируете сделать это с помощью эффектов, вы можете добиться эффекта затемнения при наведении, используя эффект ColorAdjust, установив значение яркости на отрицательное значение ( яркость в ColorAdjust находится в диапазоне от -1 до +1, где 0 является значением по умолчанию), как в следующем примере

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.effect.ColorAdjust;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;

public class Main extends Application {
    @Override
    public void start(Stage s) {
        ImageView image = new ImageView(new Image("img.png"));

        ColorAdjust darker = new ColorAdjust();
        darker.setBrightness(-.3);

        image.setOnMouseEntered(e-> {
            image.setEffect(darker);
        });

        image.setOnMouseExited(e-> {
            image.setEffect(null);
        });

        s.setScene(new Scene(new StackPane(image)));
        s.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}    

Изменение цвета изображения может включать в себя настройку оттенка с помощью ColorAdjust путем установки значение оттенка

ColorAdjust hueShift = new ColorAdjust();
hueShift.setHue(-.3);

image.setOnMouseEntered(e-> {
    image.setEffect(hueShift);
});

image.setOnMouseExited(e-> {
    image.setEffect(null);
});

Вы можете комбинировать эффекты, устанавливая эффекты в качестве входных данных для других эффектов, например, если вы хотите затемнить узел и размыть его одновременно, вы можете установить размытие эффект как вход для затемнения colorAdjust

GaussianBlur blur = new GaussianBlur();
blur.setRadius(10);

ColorAdjust darker = new ColorAdjust();
darker.setBrightness(-.3);

darker.setInput(blur);

image.setOnMouseEntered(e-> {
    image.setEffect(darker);
});

image.setOnMouseExited(e-> {
    image.setEffect(null);
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...