JavaFX2.2中的SVG图像
我是JavaFX2.2新手,到目前为止,我还没有找到在JavaFX2.2应用程序中显示SVG图像的方法。我看了一下Batik,但它并没有对我起作用,因为它转换为JavaFX2.2中的SVG图像,svg,javafx,batik,Svg,Javafx,Batik,我是JavaFX2.2新手,到目前为止,我还没有找到在JavaFX2.2应用程序中显示SVG图像的方法。我看了一下Batik,但它并没有对我起作用,因为它转换为buffereImage,而不是javafx.ImageView 有没有办法在JavaFX应用程序中显示SVG图像?或者至少可以从JavaFX导出SVG图像吗?函数Node.snapshot()是否有任何帮助 有没有办法在JavaFX应用程序中显示SVG图像 以下是一些选项: 在WebView的WebEngine中创建一个和svg图像 该
buffereImage
,而不是javafx.ImageView
有没有办法在JavaFX应用程序中显示SVG图像?或者至少可以从JavaFX导出SVG图像吗?函数Node.snapshot()
是否有任何帮助
有没有办法在JavaFX应用程序中显示SVG图像
以下是一些选项:
TranscoderException
)
您可以在此处访问完整代码:
缓冲图像
,必须实现自定义转码器:
/**
* Many thanks to bb-generation for sharing this code!
* @author bb-generation
* @link http://bbgen.net/blog/2011/06/java-svg-to-bufferedimage/
* @link In case the link above is still down: https://web.archive.org/web/20131215231214/http://bbgen.net/blog/2011/06/java-svg-to-bufferedimage/
*/
public class BufferedImageTranscoder extends ImageTranscoder {
private BufferedImage img = null;
@Override
public BufferedImage createImage(int width, int height) {
BufferedImage bi = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
return bi;
}
@Override
public void writeImage(BufferedImage img, TranscoderOutput to) throws TranscoderException {
this.img = img;
}
public BufferedImage getBufferedImage() {
return img;
}
}
buffereImage
对象:
BufferedImageTranscoder trans = new BufferedImageTranscoder();
// file may be an InputStream.
// Consult Batik's documentation for more possibilities!
TranscoderInput transIn = new TranscoderInput(file);
trans.transcode(transIn, null);
buffereImage
对象转换为Image
对象(来自JavaFX):
ImageView
:
imgView.setImage(img);
我使用上面的transcoder类在github上创建了一个小项目,该项目为JavaFX添加了SVG支持(尽管是JavaFX8): 打完电话
SvgImageLoaderFactory.install();
您可以在Java代码或CSS中的任何位置使用SVG图像,就像任何其他受支持的图像类型一样。谢谢您的详细回答!在性能方面-您建议采用哪种方式?将它们全部转换为fxml?谢谢!我想投票支持您的回答,但我没有这样做的声誉。对不起!@jewelsea正在将SVG转换为fxml关于创建
javafx.scene.shape.SVGPath的实例的FXML?如果是这样,那么#2(和#3)和#5不是一样吗?或者您在#5中提到了不同的SVGPath
?(编辑:显然这和我看到的链接是一样的。所以我想问一下#2和#3中的内容是否不是关于javafx.scene.shape.SVGPath
)我在看这个例子:Batik在Java9+上已经被破坏了好几年了,而且维护人员似乎对修复它不太感兴趣,所以如果你需要在过去5年发布的JRE上运行,那么采用这种方法将是浪费时间。有关详细信息,请参阅。再加上厨房水槽非可选依赖项,这会给com带来阴影MonAPI jars-例如jython-我不建议在生产代码中使用蜡染。
SvgImageLoaderFactory.install();