2013-08-08 12 views
5

Wenn ich einen Screenshot meiner Szene in JavaFx mache, speichere ich BufferedImage in einer Datei als PNG/JPG. Wenn ich versuche, die Bildgröße auf die volle Länge zu maximieren, bekomme ich schwarze Ränder auf dem Bild von der linken Seite des Bildes nach unten, ohne dass das Bild seine Größe erhöht. Die Größe des Bildes wird nur erhöht, bis ich meine Abmessungen wie unten gezeigt auf 1300x700 eingestellt habe.Unerwünschte schwarze Ränder beim Versuch, das Bild auf die volle Größe zu vergrößern

BufferedImage image = new BufferedImage(1300, 700, BufferedImage.TYPE_INT_RGB); 

Sobald ich jedoch die Abmessungen größer als 1300x700 vergrößern, erscheinen die schwarzen Ränder.

Das folgende Bild wird auf

BufferedImage image = new BufferedImage(1500, 900, BufferedImage.TYPE_INT_RGB); 

enter image description here

Wie Sie sehen können, ein Teil des Bildes noch abgeschnitten, und es gibt jetzt eine große schwarze Grenze neben dem Bild statt der tatsächliches Bild in voller Größe.

Das folgende Bild wird auf

BufferedImage image = new BufferedImage(1300, 700, BufferedImage.TYPE_INT_RGB); 

enter image description here

Wie Sie sehen können, wird das Bild nach wie vor an der gleichen Stelle abgeschnitten, aber es gibt keine schwarzen Ränder an der Seite mit ihm.

Wie kann ich den gesamten Schnappschuss meiner aktuellen Szene in eine Datei einfügen, ohne diese Ränder und ohne dass der Inhalt abgeschnitten wird?

Hier ist mein Code:

File fa = new File("test.jpg"); 
    snapshot = quotes.getScene().snapshot(null); 

    RenderedImage renderedImage = SwingFXUtils.fromFXImage(snapshot, null); 
    BufferedImage image = new BufferedImage(1300, 700, BufferedImage.TYPE_INT_RGB); 
    image.setData(renderedImage.getData()); 
    ImageIO.write(image, "jpg", fa); 
+0

Try WritableImage als Parameter für Snapshot-Methode zu setzen, etwa so:. 'Quotes.getScene() Schnappschuss (Snapshot);' – Eeliya

Antwort

0

Die schwarze Grenze kommt von nicht initialisierten Pixelpuffer, in Ihrem BufferedImage Objekt. Also, ich denke, die renderedImage selbst enthält nicht den richtigen Teil Ihrer Szene.

Die Szene ist möglicherweise noch nicht richtig skaliert, wenn Sie den Schnappschuss machen. Versuchen Sie, eine entsprechende WritableImage zum snapshot method zu geben:

snapshot = quotes.getScene().snapshot(new WritableImage(1500, 900));