Java 基于CSS样式表更改图像颜色
我有Java 基于CSS样式表更改图像颜色,java,javafx,javafx-8,javafx-css,Java,Javafx,Javafx 8,Javafx Css,我有ImageView,我希望图像根据附加到场景的样式表中的全局CSS属性更改其颜色 .root { theme-image-color: red; } 我已经有一个实用的方法,可以改变颜色 public static final Image changeImageColor(Image originalImage, Color desiredColor) 此方法返回具有所需颜色的Image的新实例。它是使用writeableimage、PixelReader和PixelWriter
ImageView
,我希望图像根据附加到场景的样式表中的全局CSS属性更改其颜色
.root
{
theme-image-color: red;
}
我已经有一个实用的方法,可以改变颜色
public static final Image changeImageColor(Image originalImage, Color desiredColor)
此方法返回具有所需颜色的Image
的新实例。它是使用writeableimage
、PixelReader
和PixelWriter
实现的,但它们在这里并不重要
可以在运行时切换附加到场景的样式表。当样式表更改时,如何使图像更改颜色
我认为唯一有意义的是创建一个新的JavaFXCSS属性(例如,-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;
}
公共静态最终可写图像changeImageColor(图像图像,颜色newColor)
{
if(image==null)
抛出新的IllegalArgumentException(“无法更改空图像的颜色”);
WritableImage newImage=新的WritableImage((int)image.getWidth(),(int)image.getHeight());
PixelWriter=newImage.getPixelWriter();
PixelReader=image.getPixelReader();
for(int readY=0;readY0)
{
setColor(readX、readY、newColor);
}
}
}
返回新图像;
}
如何转换图像(如果图像完全被颜色填充,则改为使用矩形
)?您是否提取了一个通道(如果是这样,是否只能有R、G或B?)?你是否使用了根据给定亮度调整的所需颜色?@fabian该方法可能并不重要。但无论如何,我检查了每个像素的颜色,以查看其不透明度是否为非零,并将其更改为指定的颜色。返回值是一个可写图像
,它被转换成图像
。该方法很重要,因为可以通过混合模式实现某些效果。但无法达到afaik的阈值。