Anmelden

Archiv verlassen und diese Seite im Standarddesign anzeigen : Salamander, SVG und Clip Path



BlueJay
11-07-2011, 18:04
Hallo Leute,

nachdem ich nun endlich mit Salamander SVG-Zeichenketten als Bild darstellen lassen kann, kommt schon die nächste Frage:
Ist bei einem SVG ein Clip-Path angegeben, gibt es einen Absturz in der Salamander-Bibiothek, ausgelöst von SVGDiagramm.render().

Im Testprogramm von Salamander selbst kommt es bei diesem SVG zu seltsamen Bildfehlern.
Die Browser können es korrekt darstellen, also liegt im XML-Teil wohl kein Fehler vor.

Die Fehlermeldung:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at java.awt.geom.Area.<init>(Area.java:108)
at com.kitfox.svg.RenderableElement.beginLayer(Render ableElement.java:144)
at com.kitfox.svg.Group.render(Group.java:163)
at com.kitfox.svg.Use.render(Use.java:128)
at com.kitfox.svg.Group.render(Group.java:196)
at com.kitfox.svg.SVGRoot.render(SVGRoot.java:290)
at com.kitfox.svg.SVGDiagram.render(SVGDiagram.java:9 4)
at svgmahjongg.svgpanel.set_size(svgpanel.java:149)


Laden des SVG, es sollte danach im SVGUniverse svgu zur Verfügung stehen:


StringReader reader = new StringReader(svgstring);
dia[id]=svgu.getDiagram(svgu.loadSVG(reader,"tile"+id));
uri[id]=dia[id].getXMLBase(); // zu Testzwecken
reader.close();


Darstellen als Image:


bild[i] = new BufferedImage(wbreite, whoehe, BufferedImage.TYPE_INT_ARGB);
bg2[i]=(Graphics2D) bild[i].getGraphics();
bg2[i].setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
dia[i].setIgnoringClipHeuristic(true); // Hier der Grund für den Crash?
dia[i].setDeviceViewport(new Rectangle(0,0,breite,hoehe));
dia[i].render(bg2[i]); // <-- hier knallt's bei Anwendung eines clipPath


Hat jemand eine Idee, wie ich das trotzdem dargestellt bekomme?
Der Clip-Path ist zur Zeit ein geschlossener Path mit einem Bogen drin.

Gruß,
Ulrike

BlueJay
13-07-2011, 06:09
Hi,

es wäre nett, wenn Kitfox den Fehler beheben würde, kann ja nicht so ein großer Akt sein.

Hier nochmal die Ecke, wo es bei denen knallt:


try
{
g.getClipBounds(clipBounds);
}
catch (Exception e)
{
//For some reason, getClipBounds can throw a null pointer exception for
// some types of Graphics2D
ignoreClip = true;
}


und hier der Clip, der das verursacht (Schildform):


<clipPath id="clip0"><path d="M0,0 L100,0 L100,65 C100,125 0,125 0,65 Z" /></clipPath>


Das Ganze Bild soll in ein Image gestopft werden (siehe 1.Posing)

Entwicklungsumgebung:
Product Version: NetBeans IDE 6.9.1 (Build 201011082200)
Java: 1.6.0_23; Java HotSpot(TM) Client VM 19.0-b09
System: Windows Vista version 6.0 running on x86; Cp1252; de_DE (nb)


Die Kitfox-Bibliothek ist nun mal zum einfachen Darstellen einiger SVG-Bilder die geeigneteste Bibliothek, und vor allen Dingen vollständig, was man von einem großen Konkurrenten nicht sagen kann.

Gruß,
Ulrike

BlueJay
14-07-2011, 17:29
na, das mit dem Clip-Path geht bei Inline-SVG mit Chrome und anderen Browsern auch noch in die Hose, wenn ein Clip-Path dazukommt.

Probieren wir es später mal wieder.

Gruß,
Ulrike