我想在我的Java应用程序中将可缩放、旋转、着色并带有alpha层的SVG图像绘制到JPanel上。我该如何实现这一点?可能会有多个这样的图像重叠。
我不太了解如何在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();
}
然后,只需像显示 PNG 文件一样,在 JPanel 上显示已渲染的 BufferedImage
。