にImageView
添付されたスタイルシートのグローバル CSS プロパティに基づいて、画像の色を変更したいものがあります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;
}