Seite 1 von 1

Nodes in eine .jpeg speichern

Verfasst: 08.10.2010, 10:05
von Mitch
Hi,
wollte mal fragen, ob es möglich ein mit JavaFX erstelltes Node nicht auf dem Monitor auszugeben sonder in eine .jpeg zu speichern.

Allerdings sollte das direkt mit JavaFX gemacht werden (java würde auch gehn) und nicht über ein Screenshot oder sowas.

MfG

Re: Nodes in eine .jpeg speichern

Verfasst: 08.10.2010, 10:42
von arittner
Moin!

Schau mal hier: http://blogs.sun.com/rakeshmenonp/entry ... e_as_image

Aber über Screenshot.

Hier ein Hack, (ab FX 1.2)

Code: Alles auswählen

var context = FXLocal.getContext();
    var nodeClass = context.findClass("javafx.scene.Node");
    var getFXNode = nodeClass.getFunction("impl_getPGNode");
    var sgNode = (getFXNode.invoke(context.mirrorOf(node)) as FXLocal.ObjectValue).asObject();
    var g2dClass = (context.findClass("java.awt.Graphics2D") as FXLocal.ClassType).getJavaImplementationClass();
    var boundsClass=(context.findClass("com.sun.javafx.geom.Bounds2D") as FXLocal.ClassType).getJavaImplementationClass();
    var affineClass=(context.findClass("com.sun.javafx.geom.AffineTransform") as FXLocal.ClassType).getJavaImplementationClass();
 
    // getContentBounds() method have different signature in JavaFX 1.2
    var getBounds = sgNode.getClass().getMethod("getContentBounds",boundsClass,affineClass);
    var bounds = getBounds.invoke(sgNode, new com.sun.javafx.geom.Bounds2D(), new com.sun.javafx.geom.AffineTransform()) as com.sun.javafx.geom.Bounds2D;
 
    // Same with render() method
    var paintMethod = sgNode.getClass().getMethod("render", g2dClass, boundsClass, affineClass);
    var img = new java.awt.image.BufferedImage(500, 400,
        java.awt.image.BufferedImage.TYPE_INT_ARGB);
    var g2 =img.createGraphics();
    paintMethod.invoke(sgNode,g2, bounds, new com.sun.javafx.geom.AffineTransform());
    g2.dispose();
Beste Grüße,
Josch.

Re: Nodes in eine .jpeg speichern

Verfasst: 13.10.2010, 11:49
von Mitch
Danke werds mir anschaun.
MfG