繁体   English   中英

如何在Java中将图像转换为形状?

[英]How to convert an image into a shape in Java?

我目前正在研究一个股票市场计划,教学生如何与股票市场互动。 我现在正在处理的一个问题围绕着效率和内存问题。 我在 adobe illustrator 中制作了我所有的 2D 图标(例如设置图标、投资组合图标等) ,我将这些文件导出为 png 文件,然后将它们放入我的程序中。 我目前使用JavaFX,JavaFX的一个特性就是所谓的imageView,它是一种处理图像打开和查看的方法。

所以假设用户想在游戏中按下设置图标,我想在用户悬停在该图标上时将设置图标更改为更深或更浅的颜色,以便为用户提供更好的用户体验(UX)目前,我使用两个不同的图像并将一个从框架中删除,然后用另一个替换,这是非常低效的。

我知道 JavaFX 有一个 Shape 类,它继承了许多方法,例如FillsetFill ,但这些方法只能影响Shape类的方法。

我的问题是,“如何将导入到项目中的图像转换为可以使用 setFill 和 Fill on 等方法的图像”

如果您只想进行基本更改,例如使图标变暗或变亮,您可以查看 javaFx 的效果部分,您可以在此处阅读相关内容,或者您​​可以按照评论中的建议将图像导入为 SVG

如果您打算使用效果来实现,您可以使用 ColorAdjust Effect 通过将亮度值设置为负值来实现悬停时变暗的效果(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);
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM