首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Java中将图像转换成形状?

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

Stack Overflow用户
提问于 2020-01-14 16:57:49
回答 1查看 414关注 0票数 0

我目前正在从事一个股票市场项目,教学生如何与股票市场互动。我现在正在研究的一个问题是效率和记忆问题。我将我所有的2D图标(如设置图标、组合图标等)都放在adobe插画家中,我将这些文件导出为png文件,并将它们扔到我的程序中。我目前使用JavaFX,JavaFX的一个特性是所谓的imageView,它是一种处理图像打开和查看的方法。

因此,假设用户希望在游戏中按下 settings 图标,当用户悬停在该图标上时,我希望将设置图标更改为更深或更浅的颜色,以便为用户提供更好的用户体验(UX),我现在使用两幅不同的图像,从框架中删除其中一幅,并替换为另一幅,这是非常低效率的。

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

我的问题是,“如何将导入到项目中的图像转换为可以使用setFill和填充之类的方法”。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-01-14 18:10:12

如果你只想做一些基本的改变,比如使你的图标变暗或闪电,你可以看看javaFx的效果部分,你可以读到它的这里,或者你可以像注释中建议的那样导入你的图像。

如果您计划使用效果执行此操作,则可以使用ColorAdjust效果实现暗悬停效果,方法是将亮度值设置为负值( ColorAdjust中的亮度范围在-1到+1之间,其中0是默认值),如下例所示

代码语言:javascript
复制
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调整色调。

代码语言:javascript
复制
ColorAdjust hueShift = new ColorAdjust();
hueShift.setHue(-.3);

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

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

您可以通过将效果设置为其他效果的输入来组合效果,因此,例如,如果您想要使节点变暗并同时模糊它,则可以将模糊效果设置为对变暗的colorAdjust的输入。

代码语言:javascript
复制
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);
});
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59738458

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档