在JavaFX 2.0中加载SVG文件

我想在javafx 2.0中显示svg图像,但在API中找不到这样的东西。我猜是因为它仍处于测试阶段。

在最终版本发布之前,如何加载svg?是否已经有一个可以处理此问题的库,还是我需要解析自己的文件然后创建相应的形状?

谢谢

回答:

根据这个问题的答案,我找到了一个可行的解决方案。

(基于此答案由Devon_C_Miller)

class MyTranscoder extends ImageTranscoder {

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, TranscoderOutput out) {

}

public BufferedImage getImage() {

return image;

}

}

(基于John Doppelmann在此答案中的提示)

String uri = "path_to_svg/some.svg";

MyTranscoder transcoder = new MyTranscoder();

TranscodingHints hints = new TranscodingHints();

hints.put(ImageTranscoder.KEY_WIDTH, 20f); //your image width

hints.put(ImageTranscoder.KEY_HEIGHT, 20f); //your image height

hints.put(ImageTranscoder.KEY_DOM_IMPLEMENTATION, SVGDOMImplementation.getDOMImplementation());

hints.put(ImageTranscoder.KEY_DOCUMENT_ELEMENT_NAMESPACE_URI, SVGConstants.SVG_NAMESPACE_URI);

hints.put(ImageTranscoder.KEY_DOCUMENT_ELEMENT, SVGConstants.SVG_SVG_TAG);

hints.put(ImageTranscoder.KEY_XML_PARSER_VALIDATING, false);

transcoder.setTranscodingHints(hints);

TranscoderInput input = new TranscoderInput(url.toExternalForm());

transcoder.transcode(input, null);

BufferedImage bufferedImage = transcoder.getImage();

ByteArrayOutputStream outputStream = new ByteArrayOutputStream();

JPEGImageEncoder imageEncoder = JPEGCodec.createJPEGEncoder(outputStream);

imageEncoder.encode(bufferedImage);

byte[] bytes = outputStream.toByteArray();

InputStream inputStream = new ByteArrayInputStream(bytes);

//javafx.scene.image.Image

Image image = new Image(inputStream);

//javafx.scene.image.ImageView

ImageView imageView = new ImageView();

imageView.setImage(image);

this.getChildren().add(imageView);

希望这会有所帮助!

以上是 在JavaFX 2.0中加载SVG文件 的全部内容, 来源链接: utcz.com/qa/421319.html

回到顶部