Intento crear una snapshot de cierto Pane, pero la imagen creada es mas grade que el Pane.
El tamaño del Pane es de 850×1200, pero el tamaño de la imagen creada es de 850×1203, dejando una fila transparente de 1 pixel en la parte superior y una fila transparente de 2 pixeles en la parte inferior de la imagen.
Tamaño esperado = 850×1200 px.
Tamaño final = 850×1203 px.
//La ruta es seleccionada por el usuario en otra función File selectedDirectory = askPath(); //Utilizo un constructor antes de inicializar el FXML CardController controller = new CardController(/*parameters*/); FXMLLoader loader = new FXMLLoader(); loader.setLocation(getClass().getResource("/fxml/Card.fxml")); loader.setController(controller); Pane card = loader.load(); //El tamaño maximo y minimo del panel son 850x1200 //creando un Stage para mostrar el Pane Stage cardPreview = new Stage(); StackPane root = new StackPane(); cardPreview.setScene(new Scene(root)); root.getChildren().add(card); cardPreview.show(); System.out.println(card.getWidth()+"x"+card.getHeight()); // 850x1200 SnapshotParameters parameters = new SnapshotParameters(); parameters.setFill(Color.TRANSPARENT); WritableImage snapshot = card.snapshot(parameters, null); System.out.println(snapshot.getWidth()+"x"+snapshot.getHeight()); // 850x1203 BufferedImage bufferedImage = new BufferedImage(850, 120, BufferedImage.TYPE_INT_ARGB); image = javafx.embed.swing.SwingFXUtils.fromFXImage(snapshot, bufferedImage); Graphics2D gd = (Graphics2D) image.getGraphics(); gd.translate(card.getWidth(), card.getHeight()); ImageIO.write(image, "png", selectedDirectory);
Estoy utilizando exactamente el mismo código para otro panel de tamaño 1715×1200, y la imagen creada es del mismo tamaño, así que realmente no sé por qué me genera esas 3 filas de pixeles transparantes con los paneles de 850×1200.