当前位置: 首页 > 知识库问答 >
问题:

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

淳于玺
2023-03-14

我目前正在从事一个股票市场项目,教学生如何与股票市场互动。我现在正在研究的一个问题围绕着效率和记忆力的问题。我在Adobe illustrator中制作了所有2D图标(例如设置图标,投资组合图标等),我将这些文件导出为png文件,并将它们放入我的程序中。我目前使用 JavaFX,JavaFX 的一个功能是所谓的图像视图,这是一种处理图像打开和查看的方法。

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

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

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

共有1个答案

阎英朗
2023-03-14

如果您只想进行一些基本的更改,如使图标变暗或变亮,您可以查看javaFx的效果部分,您可以在此处阅读,或者您可以按照注释中的建议将图像导入为SVG

如果您计划使用效果,可以通过将亮度值设置为负值(ColorAdjust中的亮度范围介于-1和1之间,其中0为默认值),使用ColorAdjust效果实现悬停变暗效果,如下例所示

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);
});

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

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);
});
 类似资料:
  • 问题内容: 如何将图像的白色背景转换为透明背景?谁能给我打电话怎么做? 问题答案: Google的第一个结果是: 使颜色透明 http://www.rgagnon.com/javadetails/java-0265.html 它使图像的蓝色部分透明,但是我敢肯定您可以对其进行调整以使用白色 (提示:传递给函数,而不是)

  • 我的目标是使图像圆形并显示它。如果图像是方形的,那么我可以通过简单地使用CSS的属性将其转换为圆形。但是当图像是矩形时,使用这个CSS属性会给我椭圆形的图像。 剪辑的部分是不可见的,但仍然存在。所以即使现在我也在尝试使用属性,它给我椭圆形图像,右侧和左侧被剪辑。 我有什么办法可以解决这个问题吗?

  • 问题内容: 使用Java的库如何将32bpp图像(ARGB)转换为16bpp图像(ARGB)?出于好奇,在像素级别上,此转换有什么作用?如果我有一个int值保存一个像素值(具有所有通道),那么在发生转换后,该int会有什么不同? 问题答案: 将32位AARRGGBB值转换为16位ARGB值将是这样的: 它会将所有内容粘贴在低16位中,而将高16位保留为0。 对于每个通道,您会丢失颜色信息的低4位,

  • 问题内容: 我正在尝试使用以下代码将Icon()转换为Image(): 问题是,函数在上抛出。 对于记录,该值为默认图标(通过获取) 以下是引发异常的详细信息: 如果您需要更多详细信息,请告诉我,我将编辑我的信息以添加它们。 谢谢! 问题答案: 刚刚找到了一个代码段,如果您想更频繁地包装那些表现不佳的LAF提供的图标,可能会有所帮助: 要在您的代码段中使用,只需传递任意组件:

  • 问题内容: 我想将UIView转换为图像并将其保存在我的应用程序中。有人可以告诉我如何拍摄视图的屏幕截图或将其转换为图像,以及将其保存在应用程序(而不是相机胶卷)中的最佳方法是什么?这是该视图的代码: 问题答案: 例如,如果我有一个尺寸视图:100 100时50 50。我可以使用以下屏幕截图:

  • 问题内容: 我试图用来读取RGB图像并将其转换为灰度。 在matlab中,我使用以下代码: 在matplotlib教程中,他们没有介绍。他们只是读了图像 然后将它们切成薄片,但这与根据我的理解将RGB转换为灰度不是同一回事。 我发现很难相信numpy或matplotlib没有将rgb转换为灰色的内置函数。这不是图像处理中的常见操作吗? 我写了一个非常简单的函数,可以在5分钟内使用导入的图像。这是非