根据这个问题的答案,我找到了一个可行的解决方案。
1.包括对蜡染SVG工具包罐的引用
2.实现自己的转码器
(基于此答案由Devon_C_Miller)
class MyTransprer extends ImageTransprer { private BufferedImage image = null; @Override public BufferedImage createImage(int w, int h) { image = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB); return image; } @Override public void writeImage(BufferedImage img, TransprerOutput out) { } public BufferedImage getImage() { return image; }}
3.从您的svg获取BufferedImage
(基于John Doppelmann在此答案中的提示)
String uri = "path_to_svg/some.svg";MyTransprer transprer = new MyTransprer();TranscodingHints hints = new TranscodingHints();hints.put(ImageTransprer.KEY_WIDTH, 20f); //your image widthhints.put(ImageTransprer.KEY_HEIGHT, 20f); //your image heighthints.put(ImageTransprer.KEY_DOM_IMPLEMENTATION, SVGDOMImplementation.getDOMImplementation());hints.put(ImageTransprer.KEY_document_ELEMENT_NAMESPACE_URI, SVGConstants.SVG_NAMESPACE_URI);hints.put(ImageTransprer.KEY_document_ELEMENT, SVGConstants.SVG_SVG_TAG);hints.put(ImageTransprer.KEY_XML_PARSER_VALIDATING, false);transprer.setTranscodingHints(hints);TransprerInput input = new TransprerInput(url.toExternalForm());transprer.transpre(input, null);BufferedImage bufferedImage = transprer.getImage();
4.从BufferedImage创建一个InputStream
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();JPEGImageEnprer imageEnprer = JPEGCodec.createJPEGEnprer(outputStream);imageEnprer.enpre(bufferedImage);byte[] bytes = outputStream.toByteArray();InputStream inputStream = new ByteArrayInputStream(bytes);
5.将图像添加到您的ImageView
//javafx.scene.image.ImageImage image = new Image(inputStream);//javafx.scene.image.ImageViewImageView imageView = new ImageView();imageView.setImage(image);this.getChildren().add(imageView);
希望这会有所帮助!



