基于CSS样式表更改图像颜色

时间:2016-11-28 09:53:38

标签: java javafx javafx-8 javafx-css

我有ImageView我希望图片根据附加到Scene的样式表中的全局CSS属性更改颜色。

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

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

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

此方法返回具有所需颜色的Image的新实例。它是使用WritableImagePixelReaderPixelWriter实现的,但在此处并不重要。

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

我认为唯一有意义的是创建一个新的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;
}

0 个答案:

没有答案