gpt4 book ai didi

java - 在 JPanel 上绘制 SVG 图像

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:49:01 29 4
gpt4 key购买 nike

我想在我的 Java 应用程序中的 JPanel 上绘制经过缩放、旋转、着色和带有 alpha 层的 SVG 图像。我怎样才能做到这一点?这些图像中可能有多个重叠。

我真的不知道如何在 Java 中使用 SVG 图像所以请从头开始解释,不仅仅是渲染过程:)

提前致谢!

最佳答案

您需要将 SVG 图像转换为 JPanel 可以显示的类型——我假设您已经知道如何使用 BufferedImage 来显示,例如一个 PNG,并且您不需要编辑 SVG,只需显示它即可。

这里的关键是 Java 本身不支持 SVG。你必须使用像 batik 这样的库加载图像并将其转换为可显示格式。

我从 http://bbgen.net/blog/2011/06/java-svg-to-bufferedimage/ 偷了这个答案

编写一个简单的转码器

class BufferedImageTranscoder extends ImageTranscoder
{
@Override
public BufferedImage createImage(int w, int h)
{
BufferedImage bi = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB);
return bi;
}

@Override
public void writeImage(BufferedImage img, TranscoderOutput output)
{
this.img = img;
}

public BufferedImage getBufferedImage()
{
return img;
}
private BufferedImage img = null;
}

使用转码器

public static BufferedImage loadImage(File svgFile, float width, float height)
{
BufferedImageTranscoder imageTranscoder = new BufferedImageTranscoder();

imageTranscoder.addTranscodingHint(PNGTranscoder.KEY_WIDTH, width);
imageTranscoder.addTranscodingHint(PNGTranscoder.KEY_HEIGHT, height);

TranscoderInput input = new TranscoderInput(svgFile);
imageTranscoder.transcode(input, null);

return imageTranscoder.getBufferedImage();
}

然后,只需在 JPanel 上显示呈现的 BufferedImage,就好像它是 PNG 或其他格式一样。

关于java - 在 JPanel 上绘制 SVG 图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20664107/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com