java - 在 javafx 2.0 中加载 SVG 文件

标签 java svg javafx-2

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

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

谢谢

最佳答案

基于this的回答问题我找到了一个可行的解决方案。

<强>1。包括对 Batik SVG Toolkit 的引用 jar

<强>2。实现您自己的转码器
(基于 thisDevon_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;
    }

<强>3。从您的 svg 中获取 BufferedImage
(基于 this 中的提示 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();

<强>4。从 BufferedImage 创建 InputStream

ByteArrayOutputStream outputStream = new ByteArrayOutputStream();

JPEGImageEncoder imageEncoder = JPEGCodec.createJPEGEncoder(outputStream);
imageEncoder.encode(bufferedImage);

byte[] bytes = outputStream.toByteArray();
InputStream inputStream = new ByteArrayInputStream(bytes);

<强>5。将图像添加到您的 ImageView

//javafx.scene.image.Image
Image image = new Image(inputStream);
//javafx.scene.image.ImageView
ImageView imageView = new ImageView();
imageView.setImage(image);
this.getChildren().add(imageView);

希望这会有所帮助!

关于java - 在 javafx 2.0 中加载 SVG 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6854601/

相关文章:

java - 如何使用 MySQL Read-Replica 配置 Spring/Hibernate

java - 大端字节缓冲区中的字节顺序

python - 在 QtWebView 中以正确的尺寸显示 SVG 图像

graph - 在 javafx 2.2 散点图中隐藏轴

Javafx:使用主题标签和号码实时更新电话号码文本字段

java - 用java实现苹果推送通知服务到iphone

java - 如何将 S3 区域保留在 Config.properties 文件中

asp.net - 启用压缩 fontawesome-webfont.svg

svg - 在通过剪辑路径时模糊 svg 形状

javafx-2 - JavaFX : Formatting a TabPane with Vertical Tabs and Horizontal Tab Labels