getavataaars svg file error
DJ-Raven opened this issue · 5 comments
DJ-Raven commented
am try to generate svg file from getavataaars and use with jsvg I got error
java.lang.IllegalArgumentException: Width (0) and height (0) must be > 0
And my output show only circle element
I have try to test with flatlaf svg icon. also error display with the red rectangle.
So how to fixed this. thank you.
DJ-Raven commented
weisJ commented
Can you please provide the code of an example svg and the stacktrace of the exception.
DJ-Raven commented
@weisJ here my full code
import com.github.weisj.jsvg.SVGDocument;
import com.github.weisj.jsvg.geometry.size.FloatSize;
import com.github.weisj.jsvg.parser.SVGLoader;
import com.kitfox.svg.SVGDiagram;
import com.kitfox.svg.SVGUniverse;
import javax.swing.*;
import java.awt.*;
import java.awt.image.BufferedImage;
public class TestSVG extends JFrame {
public TestSVG() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(new Dimension(500, 500));
JLabel lb = new JLabel(new SVGIcon("/icon/avataaars.svg"));
lb.setBackground(Color.cyan);
lb.setOpaque(true);
setLayout(new BorderLayout());
add(lb);
}
public class SVGIcon implements Icon {
BufferedImage imageRender;
public SVGIcon(String icon) {
imageRender = createSvg(icon, true);
}
private BufferedImage createSvg(String icon, boolean useJSvg) {
BufferedImage image;
if (useJSvg) {
SVGLoader loader = new SVGLoader();
SVGDocument document = loader.load(getClass().getResource(icon));
FloatSize size = document.size();
image = new BufferedImage((int) size.width, (int) size.height, BufferedImage.TYPE_INT_ARGB);
Graphics2D g = image.createGraphics();
setRenderingHints(g);
document.render(null, g);
g.dispose();
} else {
SVGUniverse svgUniverse = new SVGUniverse();
SVGDiagram svgDiagram = svgUniverse.getDiagram(svgUniverse.loadSVG(getClass().getResource(icon)));
image = new BufferedImage((int) svgDiagram.getWidth(), (int) svgDiagram.getHeight(), BufferedImage.TYPE_INT_ARGB);
Graphics2D g = image.createGraphics();
setRenderingHints(g);
try {
svgDiagram.render(g);
} catch (Exception e) {
e.printStackTrace();
}
g.dispose();
}
return image;
}
@Override
public void paintIcon(Component c, Graphics g, int x, int y) {
g.drawImage(imageRender, x, y, null);
}
@Override
public int getIconWidth() {
return imageRender.getWidth();
}
@Override
public int getIconHeight() {
return imageRender.getHeight();
}
}
private void setRenderingHints(Graphics2D g) {
g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g.setRenderingHint(RenderingHints.KEY_STROKE_CONTROL, RenderingHints.VALUE_STROKE_PURE);
g.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
}
public static void main(String[] args) {
EventQueue.invokeLater(() -> {
new TestSVG().setVisible(true);
});
}
}
and this StackTrace exception
Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: Width (0) and height (0) must be > 0
at java.desktop/java.awt.image.SampleModel.<init>(SampleModel.java:126)
at java.desktop/java.awt.image.ComponentSampleModel.<init>(ComponentSampleModel.java:140)
at java.desktop/java.awt.image.PixelInterleavedSampleModel.<init>(PixelInterleavedSampleModel.java:87)
at java.desktop/java.awt.image.Raster.createInterleavedRaster(Raster.java:642)
at java.desktop/java.awt.image.Raster.createInterleavedRaster(Raster.java:278)
at java.desktop/java.awt.image.Raster.createInterleavedRaster(Raster.java:212)
at java.desktop/java.awt.image.ComponentColorModel.createCompatibleWritableRaster(ComponentColorModel.java:2827)
at java.desktop/java.awt.image.BufferedImage.<init>(BufferedImage.java:420)
at com.github.weisj.jsvg.util.ImageUtil.createLuminosityBuffer(ImageUtil.java:59)
at com.github.weisj.jsvg.util.BlittableImage.create(BlittableImage.java:91)
at com.github.weisj.jsvg.nodes.Mask.createMaskPaint(Mask.java:91)
at com.github.weisj.jsvg.renderer.NodeRenderer.createRenderInfo(NodeRenderer.java:129)
at com.github.weisj.jsvg.renderer.NodeRenderer.renderNode(NodeRenderer.java:94)
at com.github.weisj.jsvg.nodes.container.CommonRenderableContainerNode.render(CommonRenderableContainerNode.java:81)
at com.github.weisj.jsvg.renderer.NodeRenderer.renderNode(NodeRenderer.java:95)
at com.github.weisj.jsvg.nodes.container.CommonRenderableContainerNode.render(CommonRenderableContainerNode.java:81)
at com.github.weisj.jsvg.renderer.NodeRenderer.renderNode(NodeRenderer.java:95)
at com.github.weisj.jsvg.nodes.container.CommonRenderableContainerNode.render(CommonRenderableContainerNode.java:81)
at com.github.weisj.jsvg.renderer.NodeRenderer.renderNode(NodeRenderer.java:95)
at com.github.weisj.jsvg.nodes.container.CommonRenderableContainerNode.render(CommonRenderableContainerNode.java:81)
at com.github.weisj.jsvg.nodes.container.BaseInnerViewContainer.renderWithSize(BaseInnerViewContainer.java:141)
at com.github.weisj.jsvg.nodes.container.BaseInnerViewContainer.renderWithSize(BaseInnerViewContainer.java:82)
at com.github.weisj.jsvg.SVGDocument.render(SVGDocument.java:89)
at com.github.weisj.jsvg.SVGDocument.render(SVGDocument.java:56)
at test.TestSVG$SVGIcon.createSvg(TestSVG.java:44)
at test.TestSVG$SVGIcon.<init>(TestSVG.java:32)
at test.TestSVG.<init>(TestSVG.java:20)
at test.TestSVG.lambda$main$0(TestSVG.java:86)
at java.desktop/java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:313)
at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:770)
at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:721)
at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:715)
at java.base/java.security.AccessController.doPrivileged(Native Method)
at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:740)
at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)
at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)
at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113)
at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109)
at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)
Process finished with exit code 0
DJ-Raven commented
weisJ commented
Fixed in version 1.2.0