我想在我的Java应用程序中将SVG图像绘制,缩放,旋转,着色并使用alpha图层绘制到JPanel上。我怎样才能做到这一点?这些图像可能有多个重叠。
我真的不知道如何在Java中使用SVG图像所以请从一开始就解释,而不仅仅是渲染过程:)
提前致谢!
答案 0 :(得分:7)
您需要将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一样。
答案 1 :(得分:7)
使用Batik(http://xmlgraphics.apache.org/batik/)或SVGSalamander(https://svgsalamander.java.net/)。我以前成功使用了蜡染,但我还没有尝试过SVGSalamander。
在蜡染中,有一个SVG面板可以为您显示图像,并添加键盘/鼠标快捷键以进行缩放,平移和旋转图像。但是,您可以禁用这些快捷方式并实现自己的机制。
此外,通过一些工作,您可以重叠图像。
请务必阅读常见问题解答。