我想在我的Java应用程序中将SVG图像绘制,缩放,旋转,着色并使用alpha图层绘制到JPanel上.我怎样才能做到这一点?这些图像中可能有多个重叠.
我真的不知道如何在Java中使用SVG图像所以请从一开始就解释,而不仅仅是渲染过程:)
提前致谢!
您需要将SVG图像转换为可以由JPanel显示的类型 - 我将假设您已经知道如何使用它BufferedImage来显示例如PNG,并且您不需要编辑SVG,只需显示它.
这里的关键是Java没有对SVG的本机支持.您必须使用像蜡染这样的库来加载图像并将其转换为可显示的格式.
我从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;
}
Run Code Online (Sandbox Code Playgroud)
使用转码器
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();
}
Run Code Online (Sandbox Code Playgroud)
然后,只需BufferedImage在JPanel上显示渲染,就像它是PNG或其他任何东西一样.
使用Batik(http://xmlgraphics.apache.org/batik/)或SVGSalamander(https://svgsalamander.java.net/).我以前成功使用了蜡染,但我还没有尝试过SVGSalamander.
在蜡染中,有一个SVG面板,可以为您显示图像,并添加键盘/鼠标快捷键,用于缩放,平移和旋转图像.但是,您可以禁用这些快捷方式并实现自己的机制.
此外,通过一些工作,您可以重叠图像.
请务必阅读常见问题解答.
| 归档时间: |
|
| 查看次数: |
17062 次 |
| 最近记录: |