我有ImageView
我希望图片根据附加到Scene
的样式表中的全局CSS属性更改颜色。
.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;
}