3

我有ImageView我希望图像根据附加到Scene.

.root
{
    theme-image-color: red;
}

我已经有一个可以改变颜色的实用方法。

public static final Image changeImageColor(Image originalImage, Color desiredColor)

Image此方法返回具有所需颜色的新实例。它是使用WritableImage,PixelReader和实现的PixelWriter,但它们在这里并不重要。

附加到场景的样式表可以在运行时切换。更改样式表时如何使图像更改颜色?

我认为唯一有意义的是创建一个新的 JavaFX CSS 属性(例如-image-color: theme-image-color;),但似乎不可能像这样添加它。

编辑

看起来我也应该包括该changeImageColor()方法。

public static final WritableImage changeImageColor(Image image, Color newColor)
{
    if (image == null)
        throw new IllegalArgumentException("Cannot change the color of a null image.");

    WritableImage newImage = new WritableImage((int) image.getWidth(), (int) image.getHeight());
    PixelWriter writer = newImage.getPixelWriter();
    PixelReader reader = image.getPixelReader();

    for (int readY = 0; readY < image.getHeight(); readY++)
    {
        for (int readX = 0; readX < image.getWidth(); readX++)
        {
            Color color = reader.getColor(readX, readY);
            if (color.getOpacity() > 0)
            {
                writer.setColor(readX, readY, newColor);
            }
        }
    }

    return newImage;
}
4

0 回答 0